From a6f0b961a1d71420dc796120d7513157f544053a Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 10 Aug 2023 23:40:06 +0530 Subject: [PATCH 01/87] Update UserController.java --- .../upsmf/userManagement/controller/UserController.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 52bd240..fabf86c 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -8,7 +8,8 @@ import java.net.URISyntaxException; -@RestController(value = "/api/v1/user)") +@RestController +@RequestMapping(value = "/api/v1/user") public class UserController { @Autowired @@ -38,4 +39,9 @@ public ResponseEntity activateUser(@RequestBody final JsonNode body) t public ResponseEntity deactivateUser(@RequestBody final JsonNode body) throws URISyntaxException { return userHandler.deactivateUser(body); } + + @GetMapping(value = "/otp", consumes = "application/json", produces = "application/json") + public ResponseEntity sendOTP(@RequestParam int phoneNumber) throws URISyntaxException { + return userHandler.sendOtp(phoneNumber); + } } From 65c1279fdfdedea7aaac5915a6f4ec4f819a888b Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 10 Aug 2023 23:40:53 +0530 Subject: [PATCH 02/87] Update UserHandler.java --- .../com/tarento/upsmf/userManagement/handler/UserHandler.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 9172e44..8c428b4 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -33,4 +33,8 @@ public ResponseEntity deactivateUser(final JsonNode body) throws URIS return userService.deactivateUser(body); } + public ResponseEntity sendOTP(int phoneNumber) throws URISyntaxException { + return userService.sendOTP(phoneNumber); + } + } From 5445c515195b41816cbfcff7ec6f98d9b69861a7 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 10 Aug 2023 23:43:11 +0530 Subject: [PATCH 03/87] Update UserService.java --- .../userManagement/services/UserService.java | 37 ++++++++++++++++++- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index a96e004..53493ae 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -12,8 +12,8 @@ import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; -import java.net.URI; -import java.net.URISyntaxException; +import java.net.*; +import java.nio.charset.StandardCharsets; @Component public class UserService { @@ -90,4 +90,37 @@ public ResponseEntity deactivateUser(final JsonNode body) throws URISy ResponseEntity result = restTemplate.postForEntity(uri,httpEntity,JsonNode.class); return result; } + + public ResponseEntity sendOTP(int phoneNumber) throws URISyntaxException { + logger.info("sending otp..."); + RestTemplate restTemplate = new RestTemplate(); + HttpHeaders headers = new HttpHeaders(); + headers.add("Content-Type", "application/json; charset=utf8"); + headers.add("Accept", "application/json"); + + HttpClient httpClient = HttpClientBuilder.create().build(); + HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); + restTemplate.setRequestFactory(requestFactory); + + String baseUrl = ""; + String username = ""; + String password = ""; + String senderId = ""; + String message = "Hello abc, Your OTP is 1234 sfasa, Lucknow"; + String destMobileNo = ""; + String msgType = "TXT"; + String response = "Y"; + + String payload = "username=" + URLEncoder.encode(username, StandardCharsets.UTF_8) + + "&pass=" + URLEncoder.encode(password, StandardCharsets.UTF_8) + + "&senderid=" + URLEncoder.encode(senderId, StandardCharsets.UTF_8) + + "&message=" + URLEncoder.encode(message, StandardCharsets.UTF_8) + + "&dest_mobileno=" + URLEncoder.encode(String.valueOf(phoneNumber), StandardCharsets.UTF_8) + + "&msgtype=" + URLEncoder.encode(msgType, StandardCharsets.UTF_8) + + "&response=" + URLEncoder.encode(response, StandardCharsets.UTF_8); + + HttpEntity httpEntity = new HttpEntity<>(payload, headers); + ResponseEntity result = restTemplate.exchange(baseUrl, HttpMethod.GET, httpEntity, JsonNode.class); + return result; + } } From 988357a1908bc0a4edce465a88ef1e7460b3ad53 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 10:11:24 +0530 Subject: [PATCH 04/87] Update UserController.java --- .../upsmf/userManagement/controller/UserController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index fabf86c..862c5e3 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -40,8 +40,8 @@ public ResponseEntity deactivateUser(@RequestBody final JsonNode body) return userHandler.deactivateUser(body); } - @GetMapping(value = "/otp", consumes = "application/json", produces = "application/json") - public ResponseEntity sendOTP(@RequestParam int phoneNumber) throws URISyntaxException { - return userHandler.sendOtp(phoneNumber); + @GetMapping(value = "/otp", consumes = "application/json", produces = "application/json") + public ResponseEntity sendOTP(@RequestParam int phoneNumber, @RequestParam String name, @RequestParam int otp) throws URISyntaxException { + return userHandler.sendOTP(phoneNumber, name, otp); } } From 05a2ea1ba91460f9d2281d5b3eb560f8d035feac Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 10:12:20 +0530 Subject: [PATCH 05/87] Update UserHandler.java --- .../com/tarento/upsmf/userManagement/handler/UserHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 8c428b4..1ddeae0 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -33,8 +33,8 @@ public ResponseEntity deactivateUser(final JsonNode body) throws URIS return userService.deactivateUser(body); } - public ResponseEntity sendOTP(int phoneNumber) throws URISyntaxException { - return userService.sendOTP(phoneNumber); + public ResponseEntity sendOTP(int phoneNumber, String name, int otp) throws URISyntaxException { + return userService.sendOTP(phoneNumber, name, otp); } } From 86c214c5b8e37468b0f0eaa9a5d8778da8f9c11f Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 10:13:39 +0530 Subject: [PATCH 06/87] Update UserService.java --- .../tarento/upsmf/userManagement/services/UserService.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 53493ae..cfe89c8 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -91,7 +91,7 @@ public ResponseEntity deactivateUser(final JsonNode body) throws URISy return result; } - public ResponseEntity sendOTP(int phoneNumber) throws URISyntaxException { + public ResponseEntity sendOTP(int phoneNumber, String name, int otp) throws URISyntaxException { logger.info("sending otp..."); RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); @@ -106,7 +106,8 @@ public ResponseEntity sendOTP(int phoneNumber) throws URISyntaxExcepti String username = ""; String password = ""; String senderId = ""; - String message = "Hello abc, Your OTP is 1234 sfasa, Lucknow"; + String message = "Hello %s, Your OTP is %s UPSMF, Lucknow"; + String message1 = String.format(message,name,otp); String destMobileNo = ""; String msgType = "TXT"; String response = "Y"; @@ -114,7 +115,7 @@ public ResponseEntity sendOTP(int phoneNumber) throws URISyntaxExcepti String payload = "username=" + URLEncoder.encode(username, StandardCharsets.UTF_8) + "&pass=" + URLEncoder.encode(password, StandardCharsets.UTF_8) + "&senderid=" + URLEncoder.encode(senderId, StandardCharsets.UTF_8) - + "&message=" + URLEncoder.encode(message, StandardCharsets.UTF_8) + + "&message=" + URLEncoder.encode(message1, StandardCharsets.UTF_8) + "&dest_mobileno=" + URLEncoder.encode(String.valueOf(phoneNumber), StandardCharsets.UTF_8) + "&msgtype=" + URLEncoder.encode(msgType, StandardCharsets.UTF_8) + "&response=" + URLEncoder.encode(response, StandardCharsets.UTF_8); From b174558bb21d2a845672359b28b2275d5c06744f Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 10:34:53 +0530 Subject: [PATCH 07/87] Update UserService.java --- .../upsmf/userManagement/services/UserService.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index cfe89c8..830d47c 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -38,7 +38,7 @@ private HttpHeaders getHeader(){ } public ResponseEntity createUser(final JsonNode body) throws URISyntaxException { - logger.info("Creating user..."); + logger.info("Creating user...{} ", body.toPrettyString()); URI uri = new URI(BASE_URL + "/user/v1/sso/create"); HttpHeaders headers = getHeader(); HttpEntity httpEntity = new HttpEntity(body, headers); @@ -46,7 +46,7 @@ public ResponseEntity createUser(final JsonNode body) throws URISyntax return result; } public ResponseEntity updateUser(final JsonNode body) throws URISyntaxException { - logger.info("Updating user..."); + logger.info("Creating user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); // Create HttpClient with PATCH support HttpClient httpClient = HttpClientBuilder.create().build(); @@ -62,7 +62,7 @@ public ResponseEntity updateUser(final JsonNode body) throws URISyntax public ResponseEntity listUser(final JsonNode body) throws URISyntaxException{ - logger.info("Listing users..."); + logger.info("Creating user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); URI uri = new URI(BASE_URL + "/user/v1/search"); HttpHeaders headers = getHeader(); @@ -72,7 +72,7 @@ public ResponseEntity listUser(final JsonNode body) throws URISyntaxEx } public ResponseEntity activateUser(final JsonNode body) throws URISyntaxException{ - logger.info("Activating user..."); + logger.info("Creating user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); URI uri = new URI(BASE_URL + "/user/v1/unblock"); HttpHeaders headers = getHeader(); @@ -82,7 +82,7 @@ public ResponseEntity activateUser(final JsonNode body) throws URISynt } public ResponseEntity deactivateUser(final JsonNode body) throws URISyntaxException { - logger.info("Deactivating user..."); + logger.info("Creating user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); URI uri = new URI(BASE_URL + "/user/v1/block"); HttpHeaders headers = getHeader(); @@ -92,7 +92,7 @@ public ResponseEntity deactivateUser(final JsonNode body) throws URISy } public ResponseEntity sendOTP(int phoneNumber, String name, int otp) throws URISyntaxException { - logger.info("sending otp..."); + logger.info("Creating user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json; charset=utf8"); From 1fde28a3037ae2467b4f5af6a9b5e86f23e7cc24 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 10:38:22 +0530 Subject: [PATCH 08/87] Update UserService.java --- .../upsmf/userManagement/services/UserService.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 830d47c..7d9a13c 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -46,7 +46,7 @@ public ResponseEntity createUser(final JsonNode body) throws URISyntax return result; } public ResponseEntity updateUser(final JsonNode body) throws URISyntaxException { - logger.info("Creating user...{} ", body.toPrettyString()); + logger.info("updateUser user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); // Create HttpClient with PATCH support HttpClient httpClient = HttpClientBuilder.create().build(); @@ -62,7 +62,7 @@ public ResponseEntity updateUser(final JsonNode body) throws URISyntax public ResponseEntity listUser(final JsonNode body) throws URISyntaxException{ - logger.info("Creating user...{} ", body.toPrettyString()); + logger.info("listUser user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); URI uri = new URI(BASE_URL + "/user/v1/search"); HttpHeaders headers = getHeader(); @@ -72,7 +72,7 @@ public ResponseEntity listUser(final JsonNode body) throws URISyntaxEx } public ResponseEntity activateUser(final JsonNode body) throws URISyntaxException{ - logger.info("Creating user...{} ", body.toPrettyString()); + logger.info("activateUser user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); URI uri = new URI(BASE_URL + "/user/v1/unblock"); HttpHeaders headers = getHeader(); @@ -82,7 +82,7 @@ public ResponseEntity activateUser(final JsonNode body) throws URISynt } public ResponseEntity deactivateUser(final JsonNode body) throws URISyntaxException { - logger.info("Creating user...{} ", body.toPrettyString()); + logger.info("deactivateUser user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); URI uri = new URI(BASE_URL + "/user/v1/block"); HttpHeaders headers = getHeader(); @@ -92,7 +92,7 @@ public ResponseEntity deactivateUser(final JsonNode body) throws URISy } public ResponseEntity sendOTP(int phoneNumber, String name, int otp) throws URISyntaxException { - logger.info("Creating user...{} ", body.toPrettyString()); + logger.info("Sending OTP..."); RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.add("Content-Type", "application/json; charset=utf8"); From 304ee8c6b6ad1f167631add5208b3374dee08ee1 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 12:12:26 +0530 Subject: [PATCH 09/87] Update UserController.java --- .../upsmf/userManagement/controller/UserController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 862c5e3..90992f2 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -40,8 +40,8 @@ public ResponseEntity deactivateUser(@RequestBody final JsonNode body) return userHandler.deactivateUser(body); } - @GetMapping(value = "/otp", consumes = "application/json", produces = "application/json") - public ResponseEntity sendOTP(@RequestParam int phoneNumber, @RequestParam String name, @RequestParam int otp) throws URISyntaxException { + @GetMapping(value = "/otp", produces = "application/json") + public ResponseEntity sendOTP(@RequestParam String phoneNumber, @RequestParam String name, @RequestParam String otp) throws URISyntaxException { return userHandler.sendOTP(phoneNumber, name, otp); } } From e448a7e855b34f33f19df4c56f493897cdddb597 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 12:13:01 +0530 Subject: [PATCH 10/87] Update UserHandler.java --- .../com/tarento/upsmf/userManagement/handler/UserHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 1ddeae0..ebd6131 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -33,7 +33,7 @@ public ResponseEntity deactivateUser(final JsonNode body) throws URIS return userService.deactivateUser(body); } - public ResponseEntity sendOTP(int phoneNumber, String name, int otp) throws URISyntaxException { + public ResponseEntity sendOTP(String phoneNumber, String name, String otp) throws URISyntaxException { return userService.sendOTP(phoneNumber, name, otp); } From 6839142f6a9699ca6db4941811c27df25b7609d0 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 12:19:44 +0530 Subject: [PATCH 11/87] Update UserService.java --- .../userManagement/services/UserService.java | 53 +++++++++---------- 1 file changed, 24 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 7d9a13c..881549f 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -32,9 +32,10 @@ private HttpHeaders getHeader(){ logger.info("Getting headers..."); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - headers.add("Authorization","Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJSR3RkMkZzeG1EMnJER3I4dkJHZ0N6MVhyalhZUzBSSyJ9.kMLn6177rvY53i0RAN3SPD5m3ctwaLb32pMYQ65nBdA"); - headers.add("x-authenticated-user-token","eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJBbjFzUzNFanlFeUhYRGdlWXUxdGdpTjM2SDdyalFOcld0a3NOQzhnbUNVIn0.eyJqdGkiOiJmODNlZTgzOS05NmM0LTQ3NWMtYTk2Yi1lNDI2MDViYmNjMjMiLCJleHAiOjE2OTA4Mzk2OTgsIm5iZiI6MCwiaWF0IjoxNjkwNzk2NDk4LCJpc3MiOiJodHRwczovL3VwaHJoLmluL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTk3YjQyY2UtNzkwNi00MTRlLWJjMzAtMzFhODk0NjgwZjUzIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibG1zIiwiYXV0aF90aW1lIjowLCJzZXNzaW9uX3N0YXRlIjoiZjc2NjlhYmItOWE4Ni00MWNjLWI2OWUtM2Q4ZTZjZjE2MjI2IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwczovL3VwaHJoLmluIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsImFkbWluIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJyZWFsbS1tYW5hZ2VtZW50Ijp7InJvbGVzIjpbIm1hbmFnZS11c2VycyIsInZpZXctdXNlcnMiLCJxdWVyeS1ncm91cHMiLCJxdWVyeS11c2VycyJdfSwiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiIiLCJuYW1lIjoiYWRtaW4gYWRtaW4iLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsImdpdmVuX25hbWUiOiJhZG1pbiIsImZhbWlseV9uYW1lIjoiYWRtaW4iLCJlbWFpbCI6ImFkbWluQHN1bmJpcmQub3JnIn0.fh9Zj8htV_-ecMWF_5E2zNsZTZCITP509uJk7zSm6o-uqLRLXy6YupbNbyUZmAL_CkkmAawCtQcNA4GTyaacSA4mRBDfWrYeLfrguFbmgTMMuLOLGzfCfnTwDYhAoyZlyO8P8pnw9B8a0nKClqbqt1h2kpGYDmNV7fXltrE4f81IDXGGIbxuWrFhqmqT2xXi4gIf6Y6ANXFoU4jYaqRXw3hoYwCyYDFi57Dljzx_KWfCb4UxKqmVF1vlLokNVoYuhMNZSICEwJCBIS_PrY9sfoYZZK1Q04NWs1F6Hppqy85PhWn_EycaEeZ0OAByIvi2HagdT0Ris2sHVFntphQbkA"); - return headers; + String authToken = env.getProperty("AuthorizationToken"); + String xAuthToken = env.getProperty("x-authenticated-user-token"); + headers.add("Authorization","Bearer " + authToken); + headers.add("x-authenticated-user-token",xAuthToken); } public ResponseEntity createUser(final JsonNode body) throws URISyntaxException { @@ -91,37 +92,31 @@ public ResponseEntity deactivateUser(final JsonNode body) throws URISy return result; } - public ResponseEntity sendOTP(int phoneNumber, String name, int otp) throws URISyntaxException { - logger.info("Sending OTP..."); - RestTemplate restTemplate = new RestTemplate(); - HttpHeaders headers = new HttpHeaders(); - headers.add("Content-Type", "application/json; charset=utf8"); - headers.add("Accept", "application/json"); - - HttpClient httpClient = HttpClientBuilder.create().build(); - HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); - restTemplate.setRequestFactory(requestFactory); - + public ResponseEntity sendOTP(String phoneNumber, String name, String otp) throws URISyntaxException { + logger.info("Sending OTP to name : {} with OTP {} ...", name, otp); String baseUrl = ""; - String username = ""; - String password = ""; - String senderId = ""; + String username = env.getProperty("userName"); + String password = env.getProperty("password"); + String senderId = env.getProperty("senderID"); String message = "Hello %s, Your OTP is %s UPSMF, Lucknow"; String message1 = String.format(message,name,otp); - String destMobileNo = ""; String msgType = "TXT"; String response = "Y"; - - String payload = "username=" + URLEncoder.encode(username, StandardCharsets.UTF_8) - + "&pass=" + URLEncoder.encode(password, StandardCharsets.UTF_8) - + "&senderid=" + URLEncoder.encode(senderId, StandardCharsets.UTF_8) - + "&message=" + URLEncoder.encode(message1, StandardCharsets.UTF_8) - + "&dest_mobileno=" + URLEncoder.encode(String.valueOf(phoneNumber), StandardCharsets.UTF_8) - + "&msgtype=" + URLEncoder.encode(msgType, StandardCharsets.UTF_8) - + "&response=" + URLEncoder.encode(response, StandardCharsets.UTF_8); - - HttpEntity httpEntity = new HttpEntity<>(payload, headers); - ResponseEntity result = restTemplate.exchange(baseUrl, HttpMethod.GET, httpEntity, JsonNode.class); + + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl) + .queryParam("username", username) + .queryParam("pass", password) + .queryParam("senderid", senderId) + .queryParam("message", message1) + .queryParam("dest_mobileno", String.valueOf(phoneNumber)) + .queryParam("msgtype", msgType) + .queryParam("response", response); + + URI uri = builder.build().encode().toUri(); + HttpHeaders headers = new HttpHeaders(); + headers.add("Accept", "application/json"); + HttpEntity httpEntity = new HttpEntity<>(headers); + ResponseEntity result = restTemplate.exchange(uri, HttpMethod.GET, httpEntity, String.class); return result; } } From 976e7ff3ca169db688cb6b75d0d8527afe6d6f46 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 12:21:37 +0530 Subject: [PATCH 12/87] Update application.properties --- src/main/resources/application.properties | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a3558a9..934e66d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -2,4 +2,8 @@ server.port = 5299 AuthorizationToken = x-authenticated-user-token = BaseURL = https://uphrh.in/api +userName = +password = +senderID = +otp_baseUrl = From 13f8c99eb25647250eb78c870bec46ef256f4e2b Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 12:21:53 +0530 Subject: [PATCH 13/87] Update UserService.java --- .../com/tarento/upsmf/userManagement/services/UserService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 881549f..dc0a78a 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -94,7 +94,7 @@ public ResponseEntity deactivateUser(final JsonNode body) throws URISy public ResponseEntity sendOTP(String phoneNumber, String name, String otp) throws URISyntaxException { logger.info("Sending OTP to name : {} with OTP {} ...", name, otp); - String baseUrl = ""; + String baseUrl = env.getProperty("otp_baseUrl"); String username = env.getProperty("userName"); String password = env.getProperty("password"); String senderId = env.getProperty("senderID"); From c0a0b5183c5da87382fd4e4a2bc05a03b93a9c3e Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 13:49:56 +0530 Subject: [PATCH 14/87] Update UserService.java --- .../upsmf/userManagement/services/UserService.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index dc0a78a..4707af0 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -18,7 +18,6 @@ @Component public class UserService { - private static final Logger logger = LoggerFactory.getLogger(UserService.class); @Autowired @@ -36,6 +35,7 @@ private HttpHeaders getHeader(){ String xAuthToken = env.getProperty("x-authenticated-user-token"); headers.add("Authorization","Bearer " + authToken); headers.add("x-authenticated-user-token",xAuthToken); + return headers; } public ResponseEntity createUser(final JsonNode body) throws URISyntaxException { @@ -94,10 +94,10 @@ public ResponseEntity deactivateUser(final JsonNode body) throws URISy public ResponseEntity sendOTP(String phoneNumber, String name, String otp) throws URISyntaxException { logger.info("Sending OTP to name : {} with OTP {} ...", name, otp); - String baseUrl = env.getProperty("otp_baseUrl"); - String username = env.getProperty("userName"); - String password = env.getProperty("password"); - String senderId = env.getProperty("senderID"); + String baseUrl = env.getProperty("otp.baseUrl"); + String username = env.getProperty("otp.userName"); + String password = env.getProperty("otp.password"); + String senderId = env.getProperty("otp.senderID"); String message = "Hello %s, Your OTP is %s UPSMF, Lucknow"; String message1 = String.format(message,name,otp); String msgType = "TXT"; From abc43a5c4770f72a2391da8c0a22ae4425717725 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 13:51:48 +0530 Subject: [PATCH 15/87] Update application.properties --- src/main/resources/application.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 934e66d..e0c084a 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -2,8 +2,8 @@ server.port = 5299 AuthorizationToken = x-authenticated-user-token = BaseURL = https://uphrh.in/api -userName = -password = -senderID = -otp_baseUrl = +otp.userName = +otp.password = +otp.senderID = +otp.baseUrl = From c5c9a48b87613d615320f00a138848352110a363 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 11 Aug 2023 13:54:31 +0530 Subject: [PATCH 16/87] Update UserService.java --- .../com/tarento/upsmf/userManagement/services/UserService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 4707af0..6c96a42 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -11,6 +11,7 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; import java.net.*; import java.nio.charset.StandardCharsets; From 53dfe8a29a291cbb3aa2f0f9623a3158c5988a4d Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 14 Aug 2023 18:52:42 +0530 Subject: [PATCH 17/87] adding keycloak based user management --- pom.xml | 14 ++++ .../userManagement/config/KeycloakConfig.java | 58 ++++++++++++++ .../controller/UserController.java | 15 +++- .../userManagement/handler/UserHandler.java | 72 +++++++++++++++-- .../userManagement/model/KeyCloakUserDTO.java | 37 +++++++++ .../services/KeyCloakUsers.java | 80 +++++++++++++++++++ .../userManagement/services/UserService.java | 47 +++++++++-- src/main/resources/application.properties | 20 +++-- 8 files changed, 321 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/tarento/upsmf/userManagement/config/KeycloakConfig.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/KeyCloakUserDTO.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/services/KeyCloakUsers.java diff --git a/pom.xml b/pom.xml index 4dee35b..ac4e5f4 100644 --- a/pom.xml +++ b/pom.xml @@ -82,6 +82,20 @@ spring-boot-starter-json 2.5.6 + + + org.keycloak + keycloak-admin-client + 21.1.2 + + + + org.keycloak + keycloak-core + 21.1.2 + + + diff --git a/src/main/java/com/tarento/upsmf/userManagement/config/KeycloakConfig.java b/src/main/java/com/tarento/upsmf/userManagement/config/KeycloakConfig.java new file mode 100644 index 0000000..dedecf2 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/config/KeycloakConfig.java @@ -0,0 +1,58 @@ +package com.tarento.upsmf.userManagement.config; + +import lombok.Builder; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.keycloak.OAuth2Constants; +import org.keycloak.admin.client.Keycloak; +import org.keycloak.admin.client.KeycloakBuilder; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; + +@Component +@Data +@Builder +@PropertySource(value = "classpath:application.properties", ignoreResourceNotFound = true) +@Slf4j +public class KeycloakConfig { + + //To be appended with /auth if keycloak version is less than 17 + @Value("${keycloak.auth-server-url}") + private String serverUrl; + + @Value("${keycloak.realm}") + private String realm; + + @Value("${keycloak.client-id}") + private String clientId; + + @Value("${keycloak.credentials.secret}") + private String clientSecret; + + @Value("${keycloak.admin-username}") + private String userName; + + @Value("${keycloak.admin-password}") + private String password; + + @Value("${keycloak.grant-type}") + private String grantType; + + Keycloak keycloak = null; + + public Keycloak getKeycloakInstance() { + log.info("keycloak real {} and server url {} .", realm, serverUrl); + if (null == keycloak) { + keycloak = KeycloakBuilder.builder() + .serverUrl(serverUrl) + .realm(realm) + .grantType(OAuth2Constants.CLIENT_CREDENTIALS) + .clientId(clientId) + .clientSecret(clientSecret) + .build(); + } + return keycloak; + } +} + diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 90992f2..37b1f84 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -26,7 +26,7 @@ public ResponseEntity updateUser(@RequestBody final JsonNode body) thr } @PostMapping(value = "/list", consumes = "application/json", produces = "application/json") - public ResponseEntity listUser(@RequestBody final JsonNode body) throws URISyntaxException { + public java.util.List listUser(@RequestBody final JsonNode body) throws URISyntaxException { return userHandler.listUser(body); } @@ -40,8 +40,19 @@ public ResponseEntity deactivateUser(@RequestBody final JsonNode body) return userHandler.deactivateUser(body); } - @GetMapping(value = "/otp", produces = "application/json") + @GetMapping(value = "/sms/otp", produces = "application/json") public ResponseEntity sendOTP(@RequestParam String phoneNumber, @RequestParam String name, @RequestParam String otp) throws URISyntaxException { return userHandler.sendOTP(phoneNumber, name, otp); } + + @PostMapping(value = "/keycloak/otp", produces = "application/json") + public ResponseEntity generateOTP(@RequestParam String email) throws URISyntaxException { + return userHandler.generateOTP(email); + } + + @PostMapping(value = "/keycloak/login", produces = "application/json") + public ResponseEntity login(@RequestParam final JsonNode body ) throws URISyntaxException { + return userHandler.login(body); + } + } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index ebd6131..95425b7 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -1,11 +1,15 @@ package com.tarento.upsmf.userManagement.handler; import com.fasterxml.jackson.databind.JsonNode; +import com.tarento.upsmf.userManagement.model.KeyCloakUserDTO; +import com.tarento.upsmf.userManagement.services.KeyCloakUsers; import com.tarento.upsmf.userManagement.services.UserService; +import org.keycloak.representations.idm.UserRepresentation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import java.net.URISyntaxException; +import java.util.List; @Component public class UserHandler { @@ -13,28 +17,82 @@ public class UserHandler { @Autowired private UserService userService; + @Autowired + private KeyCloakUsers keyCloakUsers; + public ResponseEntity createUser(final JsonNode body) throws URISyntaxException { - return userService.createUser(body); + ResponseEntity user = userService.createUser(body); + + KeyCloakUserDTO keyCloakUserDTO = KeyCloakUserDTO.builder() + .email(body.get("").asText()) + .name(body.get("").asText()) + .instituteName(body.get("").asText()) + .instituteID(body.get("").asText()) + .lastName(body.get("").asText()) + .instituteDistrict(body.get("").asText()) + .password(body.get("").asText()) + .role(body.get("").asText()) + .aadharNumber(body.get("").asText()) + .phoneNumber(body.get("").asText()) + .username(body.get("").asText()) + .registerNumber(body.get("").asText()) + .activeStatus(body.get("").asText()) + .build(); + + javax.ws.rs.core.Response response = keyCloakUsers.createUser(keyCloakUserDTO); + return user; } public ResponseEntity updateUser(final JsonNode body) throws URISyntaxException{ - return userService.updateUser(body); + ResponseEntity jsonNodeResponseEntity = userService.updateUser(body); + KeyCloakUserDTO keyCloakUserDTO = KeyCloakUserDTO.builder() + .email(body.get("").asText()) + .name(body.get("").asText()) + .instituteName(body.get("").asText()) + .instituteID(body.get("").asText()) + .lastName(body.get("").asText()) + .instituteDistrict(body.get("").asText()) + .password(body.get("").asText()) + .role(body.get("").asText()) + .aadharNumber(body.get("").asText()) + .phoneNumber(body.get("").asText()) + .username(body.get("").asText()) + .registerNumber(body.get("").asText()) + .activeStatus(body.get("").asText()) + .build(); + keyCloakUsers.updateUser(keyCloakUserDTO); + return jsonNodeResponseEntity; } - public ResponseEntity listUser(final JsonNode body) throws URISyntaxException{ - return userService.listUser(body); + public List listUser(final JsonNode body) throws URISyntaxException{ + ResponseEntity jsonNodeResponseEntity = userService.listUser(body); + List listUsers = keyCloakUsers.listUser(); + return listUsers; } public ResponseEntity activateUser(final JsonNode body) throws URISyntaxException{ - return userService.activateUser(body); + ResponseEntity jsonNodeResponseEntity = userService.activateUser(body); + keyCloakUsers.activateUser(body.get("").asText()); + return jsonNodeResponseEntity; } public ResponseEntity deactivateUser(final JsonNode body) throws URISyntaxException{ - return userService.deactivateUser(body); + ResponseEntity jsonNodeResponseEntity = userService.deactivateUser(body); + keyCloakUsers.activateUser(body.get("").asText()); + return jsonNodeResponseEntity; } public ResponseEntity sendOTP(String phoneNumber, String name, String otp) throws URISyntaxException { - return userService.sendOTP(phoneNumber, name, otp); + ResponseEntity stringResponseEntity = userService.sendOTP(phoneNumber, name, otp); + return stringResponseEntity; } + public ResponseEntity generateOTP(String email) throws URISyntaxException { + ResponseEntity stringResponseEntity = userService.generateOTP(email); + return stringResponseEntity; + } + + public ResponseEntity login(final JsonNode body) throws URISyntaxException { + return userService.login(body); + } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/KeyCloakUserDTO.java b/src/main/java/com/tarento/upsmf/userManagement/model/KeyCloakUserDTO.java new file mode 100644 index 0000000..edc0374 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/model/KeyCloakUserDTO.java @@ -0,0 +1,37 @@ +package com.tarento.upsmf.userManagement.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.*; + +import java.io.Serializable; +import java.util.UUID; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@ToString +@JsonIgnoreProperties(ignoreUnknown = true) +@EqualsAndHashCode +public class KeyCloakUserDTO implements Serializable { + + @JsonProperty(value = "name", required = true) + private String name; + @JsonProperty(value = "email", required = true) + private String email; + + private String password; + @JsonProperty(value = "phoneNumber", required = true) + private String phoneNumber; + private String instituteID; + private String instituteName; + private String instituteDistrict; + private String aadharNumber; + private String registerNumber; + private String lastName; + private String role; + private String activeStatus; + private String username = UUID.randomUUID().toString(); + +} diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/KeyCloakUsers.java b/src/main/java/com/tarento/upsmf/userManagement/services/KeyCloakUsers.java new file mode 100644 index 0000000..0a6c718 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/services/KeyCloakUsers.java @@ -0,0 +1,80 @@ +package com.tarento.upsmf.userManagement.services; + +import com.fasterxml.jackson.databind.JsonNode; +import com.tarento.upsmf.userManagement.config.KeycloakConfig; +import com.tarento.upsmf.userManagement.model.KeyCloakUserDTO; +import org.keycloak.admin.client.Keycloak; +import org.keycloak.admin.client.resource.UserResource; +import org.keycloak.admin.client.resource.UsersResource; +import org.keycloak.representations.idm.CredentialRepresentation; +import org.keycloak.representations.idm.UserRepresentation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + + +@Component +public class KeyCloakUsers { + + @Autowired + private KeycloakConfig keycloakConfig; + + + public javax.ws.rs.core.Response createUser(final KeyCloakUserDTO keyCloakUserDTO){ + Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); + UserRepresentation newUser = createUserRepresentation(keyCloakUserDTO); + UsersResource usersResource = keycloakInstance.realm(keycloakConfig.getRealm()).users(); + return usersResource.create(newUser); + } + + public void updateUser(final KeyCloakUserDTO keyCloakUserDTO) { + Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); + UserResource userResource = keycloakInstance.realm(keycloakConfig.getRealm()).users().get(keyCloakUserDTO.getUsername()); + UserRepresentation user = userResource.toRepresentation(); + /* + * update user information here + * */ + userResource.update(user); + } + + public List listUser() { + Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); + return keycloakInstance.realm(keycloakConfig.getRealm()).users().list(); + } + + public void activateUser(final String userName){ + Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); + UserResource userResource = keycloakInstance.realm(keycloakConfig.getRealm()).users().get(userName); + UserRepresentation user = userResource.toRepresentation(); + user.setEnabled(true); + } + + public void deactivateUser(final String userName) { + Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); + UserResource userResource = keycloakInstance.realm(keycloakConfig.getRealm()).users().get(userName); + UserRepresentation user = userResource.toRepresentation(); + user.setEnabled(false); + } + + public UserRepresentation createUserRepresentation(final KeyCloakUserDTO keyCloakUserDTO) { + UserRepresentation newUser = new UserRepresentation(); + newUser.setEnabled(true); + newUser.setEmail(keyCloakUserDTO.getEmail()); + newUser.setEmailVerified(true); + newUser.setUsername(keyCloakUserDTO.getEmail()); + newUser.setFirstName(keyCloakUserDTO.getName()); + newUser.setLastName(keyCloakUserDTO.getLastName()); + List roles = new ArrayList<>(); + roles.add(keyCloakUserDTO.getRole()); + newUser.setRealmRoles(roles); + CredentialRepresentation credentialRepresentation = new CredentialRepresentation(); + credentialRepresentation.setValue(keyCloakUserDTO.getPassword()); + credentialRepresentation.setType("password"); + newUser.setCredentials(Collections.singletonList(credentialRepresentation)); + return newUser; + } + +} diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 6c96a42..a92dd73 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -14,7 +14,6 @@ import org.springframework.web.util.UriComponentsBuilder; import java.net.*; -import java.nio.charset.StandardCharsets; @Component public class UserService { @@ -24,29 +23,44 @@ public class UserService { @Autowired private Environment env; + + private final RestTemplate restTemplate = new RestTemplate(); - final String BASE_URL = "https://uphrh.in/api"; + final String BASE_URL = env.getProperty("BaseURL"); + final String KEYCLOAK_BASE_URL = env.getProperty("keycloak_BaseURL"); private HttpHeaders getHeader(){ - System.out.println(env.getProperty("BaseURL")); - logger.info("Getting headers..."); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); String authToken = env.getProperty("AuthorizationToken"); String xAuthToken = env.getProperty("x-authenticated-user-token"); headers.add("Authorization","Bearer " + authToken); headers.add("x-authenticated-user-token",xAuthToken); + logger.info("Getting headers...{} ", headers); + return headers; + } + + private HttpHeaders getHeaderForKeycloak(){ + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + String authToken = env.getProperty("AuthorizationToken"); + headers.add("Authorization","Bearer " + authToken); + logger.info("Getting keycloak headers...{} ", headers); return headers; } public ResponseEntity createUser(final JsonNode body) throws URISyntaxException { logger.info("Creating user...{} ", body.toPrettyString()); - URI uri = new URI(BASE_URL + "/user/v1/sso/create"); + URI uri1 = new URI(BASE_URL + "/user/v1/sso/create"); HttpHeaders headers = getHeader(); HttpEntity httpEntity = new HttpEntity(body, headers); - ResponseEntity result = restTemplate.postForEntity(uri,httpEntity,JsonNode.class); + ResponseEntity result = restTemplate.postForEntity(uri1,httpEntity,JsonNode.class); + URI uri2 = new URI(KEYCLOAK_BASE_URL + "/v1/keycloak/user/create"); + HttpHeaders headerForKeycloak = getHeader(); + ResponseEntity result2 = restTemplate.postForEntity(uri2,httpEntity,JsonNode.class); return result; } + public ResponseEntity updateUser(final JsonNode body) throws URISyntaxException { logger.info("updateUser user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); @@ -62,7 +76,6 @@ public ResponseEntity updateUser(final JsonNode body) throws URISyntax return result; } - public ResponseEntity listUser(final JsonNode body) throws URISyntaxException{ logger.info("listUser user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); @@ -120,4 +133,24 @@ public ResponseEntity sendOTP(String phoneNumber, String name, String ot ResponseEntity result = restTemplate.exchange(uri, HttpMethod.GET, httpEntity, String.class); return result; } + + public ResponseEntity generateOTP(String email) throws URISyntaxException { + logger.info("generate OTP for user...{} ", email); + RestTemplate restTemplate = new RestTemplate(); + URI uri = new URI(BASE_URL + "/user/generateOtp"); + HttpHeaders headerForKeycloak = getHeaderForKeycloak(); + HttpEntity httpEntity = new HttpEntity(email, headerForKeycloak); + ResponseEntity result = restTemplate.postForEntity(uri,httpEntity,String.class); + return result; + } + + public ResponseEntity login(final JsonNode body) throws URISyntaxException { + logger.info("login user ...{} ", body); + RestTemplate restTemplate = new RestTemplate(); + URI uri = new URI(BASE_URL + "/user/login"); + HttpHeaders headerForKeycloak = getHeaderForKeycloak(); + HttpEntity httpEntity = new HttpEntity(body, headerForKeycloak); + ResponseEntity result = restTemplate.postForEntity(uri,httpEntity,String.class); + return result; + } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e0c084a..7c3c321 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,9 +1,17 @@ -server.port = 5299 +server.port = 5298 AuthorizationToken = -x-authenticated-user-token = +x-authenticated-user-token = BaseURL = https://uphrh.in/api -otp.userName = -otp.password = -otp.senderID = -otp.baseUrl = +otp.userName = +otp.password = +otp.senderID = +otp.baseUrl = +keycloak_BaseURL = /api/v1 +keycloak.auth-server-url = +keycloak.realm = +keycloak.client-id = +keycloak.credentials.secret = +keycloak.admin-username = +keycloak.admin-password = +keycloak.grant-type = From 44a3a521580d0a4af99d5395a5447d3680070b9a Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Tue, 15 Aug 2023 09:51:11 +0530 Subject: [PATCH 18/87] Revert "Update UserService.java" This reverts commit c5c9a48b87613d615320f00a138848352110a363. --- .../com/tarento/upsmf/userManagement/services/UserService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index a92dd73..71040d9 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -11,7 +11,6 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; import java.net.*; From a47bc5b2840ae43baa3633e9af43ad5ad326895f Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Tue, 15 Aug 2023 12:46:44 +0530 Subject: [PATCH 19/87] fix for creating users on keycloak . --- .../userManagement/config/KeycloakConfig.java | 39 +++++++--- .../userManagement/handler/UserHandler.java | 77 ++++++++++++------- .../services/KeyCloakUsers.java | 39 ++++++++-- .../userManagement/services/UserService.java | 34 +++++--- src/main/resources/application.properties | 18 ++--- 5 files changed, 142 insertions(+), 65 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/config/KeycloakConfig.java b/src/main/java/com/tarento/upsmf/userManagement/config/KeycloakConfig.java index dedecf2..2c33107 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/config/KeycloakConfig.java +++ b/src/main/java/com/tarento/upsmf/userManagement/config/KeycloakConfig.java @@ -6,40 +6,57 @@ import org.keycloak.OAuth2Constants; import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.KeycloakBuilder; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; + @Component @Data -@Builder @PropertySource(value = "classpath:application.properties", ignoreResourceNotFound = true) @Slf4j public class KeycloakConfig { - //To be appended with /auth if keycloak version is less than 17 - @Value("${keycloak.auth-server-url}") + @Autowired + private Environment env; + + private static Environment environment; + String BASE_URL; + Keycloak keycloak = null; + private String serverUrl; - @Value("${keycloak.realm}") - private String realm; + public String realm; - @Value("${keycloak.client-id}") private String clientId; - @Value("${keycloak.credentials.secret}") private String clientSecret; - @Value("${keycloak.admin-username}") private String userName; - @Value("${keycloak.admin-password}") private String password; - @Value("${keycloak.grant-type}") private String grantType; - Keycloak keycloak = null; + @PostConstruct + public void init(){ + environment = env; + BASE_URL = getPopertyValue("BaseURL"); + serverUrl = getPopertyValue("keycloak.auth-server-url"); + realm = getPopertyValue("keycloak.realm"); + clientId = getPopertyValue("keycloak.client-id"); + clientSecret = getPopertyValue("keycloak.credentials.secret"); + userName = getPopertyValue("keycloak.admin-username"); + password = getPopertyValue("keycloak.admin-password"); + grantType = getPopertyValue("keycloak.grant-type"); + } + + public static String getPopertyValue(String property){ + return environment.getProperty(property); + } public Keycloak getKeycloakInstance() { log.info("keycloak real {} and server url {} .", realm, serverUrl); diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 95425b7..10fabd9 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -5,15 +5,19 @@ import com.tarento.upsmf.userManagement.services.KeyCloakUsers; import com.tarento.upsmf.userManagement.services.UserService; import org.keycloak.representations.idm.UserRepresentation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import java.net.URISyntaxException; import java.util.List; +import java.util.UUID; @Component public class UserHandler { + private static final Logger logger = LoggerFactory.getLogger(UserHandler.class); @Autowired private UserService userService; @@ -21,78 +25,95 @@ public class UserHandler { private KeyCloakUsers keyCloakUsers; public ResponseEntity createUser(final JsonNode body) throws URISyntaxException { + logger.info("creating user with payload {} ", body.toPrettyString()); ResponseEntity user = userService.createUser(body); + JsonNode request = body.get("request"); KeyCloakUserDTO keyCloakUserDTO = KeyCloakUserDTO.builder() - .email(body.get("").asText()) - .name(body.get("").asText()) - .instituteName(body.get("").asText()) - .instituteID(body.get("").asText()) - .lastName(body.get("").asText()) - .instituteDistrict(body.get("").asText()) - .password(body.get("").asText()) - .role(body.get("").asText()) - .aadharNumber(body.get("").asText()) - .phoneNumber(body.get("").asText()) - .username(body.get("").asText()) - .registerNumber(body.get("").asText()) - .activeStatus(body.get("").asText()) + .email(getorDefault(request,"email","")) + .name(getorDefault(request,"name","")) + .instituteName(getorDefault(request,"instituteName","")) + .instituteID(getorDefault(request,"instituteID","")) + .lastName(getorDefault(request,"lastName","")) + .instituteDistrict(getorDefault(request,"instituteDistrict","")) + .password(getorDefault(request,"password","")) + .role(getorDefault(request,"role","")) + .aadharNumber(getorDefault(request,"aadharNumber","")) + .phoneNumber(getorDefault(request,"phoneNumber","")) + .registerNumber(getorDefault(request,"registerNumber","")) + .activeStatus(getorDefault(request,"activeStatus","")) + .username(UUID.randomUUID().toString()) .build(); - + logger.info("creating user in keycloak with payload {} ", keyCloakUserDTO); javax.ws.rs.core.Response response = keyCloakUsers.createUser(keyCloakUserDTO); return user; } public ResponseEntity updateUser(final JsonNode body) throws URISyntaxException{ + logger.info("updating user with payload {} ", body.toPrettyString()); ResponseEntity jsonNodeResponseEntity = userService.updateUser(body); + + JsonNode request = body.get("request"); KeyCloakUserDTO keyCloakUserDTO = KeyCloakUserDTO.builder() - .email(body.get("").asText()) - .name(body.get("").asText()) - .instituteName(body.get("").asText()) - .instituteID(body.get("").asText()) - .lastName(body.get("").asText()) - .instituteDistrict(body.get("").asText()) - .password(body.get("").asText()) - .role(body.get("").asText()) - .aadharNumber(body.get("").asText()) - .phoneNumber(body.get("").asText()) - .username(body.get("").asText()) - .registerNumber(body.get("").asText()) - .activeStatus(body.get("").asText()) + .email(getorDefault(request,"email","")) + .name(getorDefault(request,"name","")) + .instituteName(getorDefault(request,"instituteName","")) + .instituteID(getorDefault(request,"instituteID","")) + .lastName(getorDefault(request,"lastName","")) + .instituteDistrict(getorDefault(request,"instituteDistrict","")) + .password(getorDefault(request,"password","")) + .role(getorDefault(request,"role","")) + .aadharNumber(getorDefault(request,"aadharNumber","")) + .phoneNumber(getorDefault(request,"phoneNumber","")) + .username(getorDefault(request,"username","")) + .registerNumber(getorDefault(request,"registerNumber","")) + .activeStatus(getorDefault(request,"activeStatus","")) .build(); + logger.info("updating user in keycloak with payload {} ", keyCloakUserDTO); keyCloakUsers.updateUser(keyCloakUserDTO); return jsonNodeResponseEntity; } public List listUser(final JsonNode body) throws URISyntaxException{ + logger.info("creating user with payload {} ", body.toPrettyString()); ResponseEntity jsonNodeResponseEntity = userService.listUser(body); List listUsers = keyCloakUsers.listUser(); return listUsers; } public ResponseEntity activateUser(final JsonNode body) throws URISyntaxException{ + logger.info("creating user with payload {} ", body.toPrettyString()); ResponseEntity jsonNodeResponseEntity = userService.activateUser(body); keyCloakUsers.activateUser(body.get("").asText()); return jsonNodeResponseEntity; } public ResponseEntity deactivateUser(final JsonNode body) throws URISyntaxException{ + logger.info("creating user with payload {} ", body.toPrettyString()); ResponseEntity jsonNodeResponseEntity = userService.deactivateUser(body); - keyCloakUsers.activateUser(body.get("").asText()); + keyCloakUsers.deactivateUser(body.get("").asText()); return jsonNodeResponseEntity; } public ResponseEntity sendOTP(String phoneNumber, String name, String otp) throws URISyntaxException { + logger.info("sending to name: {} OTP:{} to phone: {} ", name, phoneNumber,otp); ResponseEntity stringResponseEntity = userService.sendOTP(phoneNumber, name, otp); return stringResponseEntity; } public ResponseEntity generateOTP(String email) throws URISyntaxException { + logger.info("generating otp to {} ", email); ResponseEntity stringResponseEntity = userService.generateOTP(email); return stringResponseEntity; } public ResponseEntity login(final JsonNode body) throws URISyntaxException { + logger.info("login called with payload {} ", body.toPrettyString()); return userService.login(body); } + + private String getorDefault(final JsonNode request, final String key, final String defaultValue){ + return request.get(key) != null ? request.get(key).asText() : defaultValue; + } + } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/KeyCloakUsers.java b/src/main/java/com/tarento/upsmf/userManagement/services/KeyCloakUsers.java index 0a6c718..8e2c4e2 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/KeyCloakUsers.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/KeyCloakUsers.java @@ -8,6 +8,8 @@ import org.keycloak.admin.client.resource.UsersResource; import org.keycloak.representations.idm.CredentialRepresentation; import org.keycloak.representations.idm.UserRepresentation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -19,11 +21,14 @@ @Component public class KeyCloakUsers { + private static final Logger logger = LoggerFactory.getLogger(KeyCloakUsers.class); + @Autowired private KeycloakConfig keycloakConfig; public javax.ws.rs.core.Response createUser(final KeyCloakUserDTO keyCloakUserDTO){ + logger.info("creating user {} in keycloak", keyCloakUserDTO); Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); UserRepresentation newUser = createUserRepresentation(keyCloakUserDTO); UsersResource usersResource = keycloakInstance.realm(keycloakConfig.getRealm()).users(); @@ -31,21 +36,37 @@ public javax.ws.rs.core.Response createUser(final KeyCloakUserDTO keyCloakUserDT } public void updateUser(final KeyCloakUserDTO keyCloakUserDTO) { + logger.info("updating user {} in keycloak", keyCloakUserDTO); Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); UserResource userResource = keycloakInstance.realm(keycloakConfig.getRealm()).users().get(keyCloakUserDTO.getUsername()); - UserRepresentation user = userResource.toRepresentation(); - /* - * update user information here - * */ - userResource.update(user); + if(userResource!=null) { + UserRepresentation user = userResource.toRepresentation(); + if(keyCloakUserDTO.getName()!=null && !keyCloakUserDTO.getName().isEmpty()) + user.setFirstName(keyCloakUserDTO.getName()); + + if(keyCloakUserDTO.getLastName()!=null && !keyCloakUserDTO.getLastName().isEmpty()) + user.setLastName(keyCloakUserDTO.getLastName()); + + if(keyCloakUserDTO.getPhoneNumber() != null && !keyCloakUserDTO.getPhoneNumber().isEmpty()) + user.singleAttribute("phoneNumber",keyCloakUserDTO.getPhoneNumber()); + + if(keyCloakUserDTO.getEmail() != null && !keyCloakUserDTO.getEmail().isEmpty()) + user.setEmail(keyCloakUserDTO.getEmail()); + + userResource.update(user); + } else { + logger.info("user {} was not not found. update failed.", keyCloakUserDTO); + } } public List listUser() { + logger.info("listing user in keycloak"); Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); return keycloakInstance.realm(keycloakConfig.getRealm()).users().list(); } public void activateUser(final String userName){ + logger.info("activating user:{} in keycloak",userName); Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); UserResource userResource = keycloakInstance.realm(keycloakConfig.getRealm()).users().get(userName); UserRepresentation user = userResource.toRepresentation(); @@ -53,6 +74,7 @@ public void activateUser(final String userName){ } public void deactivateUser(final String userName) { + logger.info("deActivating user:{} in keycloak",userName); Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); UserResource userResource = keycloakInstance.realm(keycloakConfig.getRealm()).users().get(userName); UserRepresentation user = userResource.toRepresentation(); @@ -67,6 +89,13 @@ public UserRepresentation createUserRepresentation(final KeyCloakUserDTO keyCloa newUser.setUsername(keyCloakUserDTO.getEmail()); newUser.setFirstName(keyCloakUserDTO.getName()); newUser.setLastName(keyCloakUserDTO.getLastName()); + newUser.singleAttribute("phoneNumber",keyCloakUserDTO.getPhoneNumber()); + newUser.singleAttribute("aadharNumber",keyCloakUserDTO.getAadharNumber()); + newUser.singleAttribute("activeStatus",keyCloakUserDTO.getActiveStatus()); + newUser.singleAttribute("instituteDistrict",keyCloakUserDTO.getInstituteDistrict()); + newUser.singleAttribute("instituteID",keyCloakUserDTO.getInstituteID()); + newUser.singleAttribute("instituteName",keyCloakUserDTO.getInstituteName()); + newUser.singleAttribute("registerNumber",keyCloakUserDTO.getRegisterNumber()); List roles = new ArrayList<>(); roles.add(keyCloakUserDTO.getRole()); newUser.setRealmRoles(roles); diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 71040d9..99143cb 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -6,15 +6,19 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.http.*; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; +import javax.annotation.PostConstruct; import java.net.*; @Component +@PropertySource({ "classpath:application.properties" }) public class UserService { private static final Logger logger = LoggerFactory.getLogger(UserService.class); @@ -22,17 +26,28 @@ public class UserService { @Autowired private Environment env; + private static Environment environment; + private String BASE_URL; + private String KEYCLOAK_BASEURL; + @PostConstruct + public void init(){ + environment = env; + BASE_URL = getPopertyValue("BaseURL"); + KEYCLOAK_BASEURL = getPopertyValue("keycloak_BaseURL"); + } + + public static String getPopertyValue(String property){ + return environment.getProperty(property); + } private final RestTemplate restTemplate = new RestTemplate(); - final String BASE_URL = env.getProperty("BaseURL"); - final String KEYCLOAK_BASE_URL = env.getProperty("keycloak_BaseURL"); private HttpHeaders getHeader(){ HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - String authToken = env.getProperty("AuthorizationToken"); - String xAuthToken = env.getProperty("x-authenticated-user-token"); + String authToken = environment.getProperty("authorizationToken"); + String xAuthToken = environment.getProperty("x-authenticated-user-token"); headers.add("Authorization","Bearer " + authToken); headers.add("x-authenticated-user-token",xAuthToken); logger.info("Getting headers...{} ", headers); @@ -42,7 +57,7 @@ private HttpHeaders getHeader(){ private HttpHeaders getHeaderForKeycloak(){ HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - String authToken = env.getProperty("AuthorizationToken"); + String authToken = env.getProperty("authorizationToken"); headers.add("Authorization","Bearer " + authToken); logger.info("Getting keycloak headers...{} ", headers); return headers; @@ -54,20 +69,15 @@ public ResponseEntity createUser(final JsonNode body) throws URISyntax HttpHeaders headers = getHeader(); HttpEntity httpEntity = new HttpEntity(body, headers); ResponseEntity result = restTemplate.postForEntity(uri1,httpEntity,JsonNode.class); - URI uri2 = new URI(KEYCLOAK_BASE_URL + "/v1/keycloak/user/create"); - HttpHeaders headerForKeycloak = getHeader(); - ResponseEntity result2 = restTemplate.postForEntity(uri2,httpEntity,JsonNode.class); return result; } public ResponseEntity updateUser(final JsonNode body) throws URISyntaxException { logger.info("updateUser user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); - // Create HttpClient with PATCH support HttpClient httpClient = HttpClientBuilder.create().build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); restTemplate.setRequestFactory(requestFactory); - URI uri = new URI(BASE_URL + "/user/v1/update"); HttpHeaders headers = getHeader(); HttpEntity httpEntity = new HttpEntity<>(body, headers); @@ -136,7 +146,7 @@ public ResponseEntity sendOTP(String phoneNumber, String name, String ot public ResponseEntity generateOTP(String email) throws URISyntaxException { logger.info("generate OTP for user...{} ", email); RestTemplate restTemplate = new RestTemplate(); - URI uri = new URI(BASE_URL + "/user/generateOtp"); + URI uri = new URI(KEYCLOAK_BASEURL + "/user/generateOtp"); HttpHeaders headerForKeycloak = getHeaderForKeycloak(); HttpEntity httpEntity = new HttpEntity(email, headerForKeycloak); ResponseEntity result = restTemplate.postForEntity(uri,httpEntity,String.class); @@ -146,7 +156,7 @@ public ResponseEntity generateOTP(String email) throws URISyntaxExceptio public ResponseEntity login(final JsonNode body) throws URISyntaxException { logger.info("login user ...{} ", body); RestTemplate restTemplate = new RestTemplate(); - URI uri = new URI(BASE_URL + "/user/login"); + URI uri = new URI(KEYCLOAK_BASEURL + "/user/login"); HttpHeaders headerForKeycloak = getHeaderForKeycloak(); HttpEntity httpEntity = new HttpEntity(body, headerForKeycloak); ResponseEntity result = restTemplate.postForEntity(uri,httpEntity,String.class); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 7c3c321..cc75c10 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,17 +1,17 @@ server.port = 5298 -AuthorizationToken = -x-authenticated-user-token = +authorizationToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJSR3RkMkZzeG1EMnJER3I4dkJHZ0N6MVhyalhZUzBSSyJ9.kMLn6177rvY53i0RAN3SPD5m3ctwaLb32pMYQ65nBdA +x-authenticated-user-token =eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJBbjFzUzNFanlFeUhYRGdlWXUxdGdpTjM2SDdyalFOcld0a3NOQzhnbUNVIn0.eyJqdGkiOiJmODNlZTgzOS05NmM0LTQ3NWMtYTk2Yi1lNDI2MDViYmNjMjMiLCJleHAiOjE2OTA4Mzk2OTgsIm5iZiI6MCwiaWF0IjoxNjkwNzk2NDk4LCJpc3MiOiJodHRwczovL3VwaHJoLmluL2F1dGgvcmVhbG1zL3N1bmJpcmQiLCJhdWQiOlsicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiYTk3YjQyY2UtNzkwNi00MTRlLWJjMzAtMzFhODk0NjgwZjUzIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibG1zIiwiYXV0aF90aW1lIjowLCJzZXNzaW9uX3N0YXRlIjoiZjc2NjlhYmItOWE4Ni00MWNjLWI2OWUtM2Q4ZTZjZjE2MjI2IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwczovL3VwaHJoLmluIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsImFkbWluIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJyZWFsbS1tYW5hZ2VtZW50Ijp7InJvbGVzIjpbIm1hbmFnZS11c2VycyIsInZpZXctdXNlcnMiLCJxdWVyeS1ncm91cHMiLCJxdWVyeS11c2VycyJdfSwiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiIiLCJuYW1lIjoiYWRtaW4gYWRtaW4iLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbiIsImdpdmVuX25hbWUiOiJhZG1pbiIsImZhbWlseV9uYW1lIjoiYWRtaW4iLCJlbWFpbCI6ImFkbWluQHN1bmJpcmQub3JnIn0.fh9Zj8htV_-ecMWF_5E2zNsZTZCITP509uJk7zSm6o-uqLRLXy6YupbNbyUZmAL_CkkmAawCtQcNA4GTyaacSA4mRBDfWrYeLfrguFbmgTMMuLOLGzfCfnTwDYhAoyZlyO8P8pnw9B8a0nKClqbqt1h2kpGYDmNV7fXltrE4f81IDXGGIbxuWrFhqmqT2xXi4gIf6Y6ANXFoU4jYaqRXw3hoYwCyYDFi57Dljzx_KWfCb4UxKqmVF1vlLokNVoYuhMNZSICEwJCBIS_PrY9sfoYZZK1Q04NWs1F6Hppqy85PhWn_EycaEeZ0OAByIvi2HagdT0Ris2sHVFntphQbkA BaseURL = https://uphrh.in/api otp.userName = otp.password = otp.senderID = otp.baseUrl = keycloak_BaseURL = /api/v1 -keycloak.auth-server-url = -keycloak.realm = -keycloak.client-id = -keycloak.credentials.secret = -keycloak.admin-username = -keycloak.admin-password = -keycloak.grant-type = +keycloak.auth-server-url = http://localhost:8080/auth +keycloak.realm = sunbird-rc +keycloak.client-id = f03ca618-411d-41d7-8168-41fa159c3fda +keycloak.credentials.secret = admin-api +keycloak.admin-username = admin +keycloak.admin-password = admin +keycloak.grant-type = password From ff9756bc99865be5dad131dfa5f9ec54af847cd4 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Wed, 16 Aug 2023 00:42:12 +0530 Subject: [PATCH 20/87] adding keyclaok features . --- .DS_Store | Bin 0 -> 6148 bytes .../userManagement/config/KeycloakConfig.java | 75 ------------ .../controller/UserController.java | 11 +- .../userManagement/handler/UserHandler.java | 61 ++++++---- .../services/KeyCloakUsers.java | 109 ------------------ .../utility/KeycloakTokenRetriever.java | 76 ++++++++++++ .../KeycloakUserActivateDeActivate.java | 68 +++++++++++ .../utility/KeycloakUserCreator.java | 82 +++++++++++++ .../utility/KeycloakUserGetter.java | 62 ++++++++++ .../utility/KeycloakUserUpdater.java | 45 ++++++++ src/main/resources/application.properties | 12 +- 11 files changed, 383 insertions(+), 218 deletions(-) create mode 100644 .DS_Store delete mode 100644 src/main/java/com/tarento/upsmf/userManagement/config/KeycloakConfig.java delete mode 100644 src/main/java/com/tarento/upsmf/userManagement/services/KeyCloakUsers.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ee771938787a1bb39cadddab0eb4f7463f2ead2b GIT binary patch literal 6148 zcmeHKI|>3Z5S>vG!N$@uSMUZw^aOhW1;s`bM6I{-TprCgpGH?ZZR8D1UNV`NkXP*N zh=|TFo0-T&L`HB!x!KS)+c)o6FCz+si0p zwti-h{ zq5pp-aYY5Fz+Wk#gGIBL<4IXtJCCzkTi`3W<=o+Bm^%f7mt&xpV=Sy3PdzE}ip{ZK V6Wc(iBkpt{e+En!8Ws4p0uNe26{i3I literal 0 HcmV?d00001 diff --git a/src/main/java/com/tarento/upsmf/userManagement/config/KeycloakConfig.java b/src/main/java/com/tarento/upsmf/userManagement/config/KeycloakConfig.java deleted file mode 100644 index 2c33107..0000000 --- a/src/main/java/com/tarento/upsmf/userManagement/config/KeycloakConfig.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.tarento.upsmf.userManagement.config; - -import lombok.Builder; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.keycloak.OAuth2Constants; -import org.keycloak.admin.client.Keycloak; -import org.keycloak.admin.client.KeycloakBuilder; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.PropertySource; -import org.springframework.core.env.Environment; -import org.springframework.stereotype.Component; - -import javax.annotation.PostConstruct; - -@Component -@Data -@PropertySource(value = "classpath:application.properties", ignoreResourceNotFound = true) -@Slf4j -public class KeycloakConfig { - - @Autowired - private Environment env; - - private static Environment environment; - String BASE_URL; - Keycloak keycloak = null; - - private String serverUrl; - - public String realm; - - private String clientId; - - private String clientSecret; - - private String userName; - - private String password; - - private String grantType; - - @PostConstruct - public void init(){ - environment = env; - BASE_URL = getPopertyValue("BaseURL"); - serverUrl = getPopertyValue("keycloak.auth-server-url"); - realm = getPopertyValue("keycloak.realm"); - clientId = getPopertyValue("keycloak.client-id"); - clientSecret = getPopertyValue("keycloak.credentials.secret"); - userName = getPopertyValue("keycloak.admin-username"); - password = getPopertyValue("keycloak.admin-password"); - grantType = getPopertyValue("keycloak.grant-type"); - } - - public static String getPopertyValue(String property){ - return environment.getProperty(property); - } - - public Keycloak getKeycloakInstance() { - log.info("keycloak real {} and server url {} .", realm, serverUrl); - if (null == keycloak) { - keycloak = KeycloakBuilder.builder() - .serverUrl(serverUrl) - .realm(realm) - .grantType(OAuth2Constants.CLIENT_CREDENTIALS) - .clientId(clientId) - .clientSecret(clientSecret) - .build(); - } - return keycloak; - } -} - diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 37b1f84..a757fdd 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -6,6 +6,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.io.IOException; import java.net.URISyntaxException; @RestController @@ -16,27 +17,27 @@ public class UserController { private UserHandler userHandler; @PostMapping(value = "/create", consumes = "application/json", produces = "application/json") - public ResponseEntity createUser(@RequestBody final JsonNode body) throws URISyntaxException { + public ResponseEntity createUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { return userHandler.createUser(body); } @PutMapping(value = "/update", consumes = "application/json", produces = "application/json") - public ResponseEntity updateUser(@RequestBody final JsonNode body) throws URISyntaxException { + public ResponseEntity updateUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { return userHandler.updateUser(body); } @PostMapping(value = "/list", consumes = "application/json", produces = "application/json") - public java.util.List listUser(@RequestBody final JsonNode body) throws URISyntaxException { + public String listUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { return userHandler.listUser(body); } @PostMapping(value = "/activate", consumes = "application/json", produces = "application/json") - public ResponseEntity activateUser(@RequestBody final JsonNode body) throws URISyntaxException { + public ResponseEntity activateUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { return userHandler.activateUser(body); } @PostMapping(value = "/deactivate", consumes = "application/json", produces = "application/json") - public ResponseEntity deactivateUser(@RequestBody final JsonNode body) throws URISyntaxException { + public ResponseEntity deactivateUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { return userHandler.deactivateUser(body); } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 10fabd9..03d1dc7 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -2,16 +2,18 @@ import com.fasterxml.jackson.databind.JsonNode; import com.tarento.upsmf.userManagement.model.KeyCloakUserDTO; -import com.tarento.upsmf.userManagement.services.KeyCloakUsers; import com.tarento.upsmf.userManagement.services.UserService; -import org.keycloak.representations.idm.UserRepresentation; +import com.tarento.upsmf.userManagement.utility.KeycloakUserActivateDeActivate; +import com.tarento.upsmf.userManagement.utility.KeycloakUserCreator; +import com.tarento.upsmf.userManagement.utility.KeycloakUserGetter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; + +import java.io.IOException; import java.net.URISyntaxException; -import java.util.List; import java.util.UUID; @Component @@ -22,11 +24,16 @@ public class UserHandler { private UserService userService; @Autowired - private KeyCloakUsers keyCloakUsers; + private KeycloakUserCreator keycloakUserCreator; + + @Autowired + private KeycloakUserGetter keycloakUserGetter; - public ResponseEntity createUser(final JsonNode body) throws URISyntaxException { + @Autowired + private KeycloakUserActivateDeActivate keycloakUserActivateDeActivate; + + public ResponseEntity createUser(final JsonNode body) throws URISyntaxException, IOException { logger.info("creating user with payload {} ", body.toPrettyString()); - ResponseEntity user = userService.createUser(body); JsonNode request = body.get("request"); KeyCloakUserDTO keyCloakUserDTO = KeyCloakUserDTO.builder() @@ -45,13 +52,13 @@ public ResponseEntity createUser(final JsonNode body) throws URISynta .username(UUID.randomUUID().toString()) .build(); logger.info("creating user in keycloak with payload {} ", keyCloakUserDTO); - javax.ws.rs.core.Response response = keyCloakUsers.createUser(keyCloakUserDTO); + String respone = keycloakUserCreator.createUser(body); + logger.info("user created ? {}", respone); + ResponseEntity user = userService.createUser(body); return user; } - public ResponseEntity updateUser(final JsonNode body) throws URISyntaxException{ - logger.info("updating user with payload {} ", body.toPrettyString()); - ResponseEntity jsonNodeResponseEntity = userService.updateUser(body); + public ResponseEntity updateUser(final JsonNode body) throws URISyntaxException, IOException { JsonNode request = body.get("request"); KeyCloakUserDTO keyCloakUserDTO = KeyCloakUserDTO.builder() @@ -70,28 +77,39 @@ public ResponseEntity updateUser(final JsonNode body) throws URISynta .activeStatus(getorDefault(request,"activeStatus","")) .build(); logger.info("updating user in keycloak with payload {} ", keyCloakUserDTO); - keyCloakUsers.updateUser(keyCloakUserDTO); - return jsonNodeResponseEntity; + String userName = keycloakUserGetter.findUser(request.get("userName").asText()); + + logger.info("updating user with payload {} ", body.toPrettyString()); + ResponseEntity jsonNodeResponseEntity = userService.updateUser(body); + + return null; } - public List listUser(final JsonNode body) throws URISyntaxException{ + public String listUser(final JsonNode body) throws URISyntaxException, IOException { logger.info("creating user with payload {} ", body.toPrettyString()); + String users = keycloakUserGetter.findUser(null); + ResponseEntity jsonNodeResponseEntity = userService.listUser(body); - List listUsers = keyCloakUsers.listUser(); - return listUsers; + + return users; } - public ResponseEntity activateUser(final JsonNode body) throws URISyntaxException{ - logger.info("creating user with payload {} ", body.toPrettyString()); + public ResponseEntity activateUser(final JsonNode body) throws URISyntaxException, IOException { + logger.info("activating user with payload {} ", body.toPrettyString()); + JsonNode request = body.get("request"); + keycloakUserActivateDeActivate.activateDeactivatUser(request.get("userName").asText(), true); + ResponseEntity jsonNodeResponseEntity = userService.activateUser(body); - keyCloakUsers.activateUser(body.get("").asText()); return jsonNodeResponseEntity; } - public ResponseEntity deactivateUser(final JsonNode body) throws URISyntaxException{ - logger.info("creating user with payload {} ", body.toPrettyString()); + public ResponseEntity deactivateUser(final JsonNode body) throws URISyntaxException, IOException { + logger.info("deactivating user with payload {} ", body.toPrettyString()); + + JsonNode request = body.get("request"); + keycloakUserActivateDeActivate.activateDeactivatUser(request.get("userName").asText(), false); + ResponseEntity jsonNodeResponseEntity = userService.deactivateUser(body); - keyCloakUsers.deactivateUser(body.get("").asText()); return jsonNodeResponseEntity; } @@ -115,5 +133,4 @@ public ResponseEntity login(final JsonNode body) throws URISyntaxExcepti private String getorDefault(final JsonNode request, final String key, final String defaultValue){ return request.get(key) != null ? request.get(key).asText() : defaultValue; } - } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/KeyCloakUsers.java b/src/main/java/com/tarento/upsmf/userManagement/services/KeyCloakUsers.java deleted file mode 100644 index 8e2c4e2..0000000 --- a/src/main/java/com/tarento/upsmf/userManagement/services/KeyCloakUsers.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.tarento.upsmf.userManagement.services; - -import com.fasterxml.jackson.databind.JsonNode; -import com.tarento.upsmf.userManagement.config.KeycloakConfig; -import com.tarento.upsmf.userManagement.model.KeyCloakUserDTO; -import org.keycloak.admin.client.Keycloak; -import org.keycloak.admin.client.resource.UserResource; -import org.keycloak.admin.client.resource.UsersResource; -import org.keycloak.representations.idm.CredentialRepresentation; -import org.keycloak.representations.idm.UserRepresentation; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - - -@Component -public class KeyCloakUsers { - - private static final Logger logger = LoggerFactory.getLogger(KeyCloakUsers.class); - - @Autowired - private KeycloakConfig keycloakConfig; - - - public javax.ws.rs.core.Response createUser(final KeyCloakUserDTO keyCloakUserDTO){ - logger.info("creating user {} in keycloak", keyCloakUserDTO); - Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); - UserRepresentation newUser = createUserRepresentation(keyCloakUserDTO); - UsersResource usersResource = keycloakInstance.realm(keycloakConfig.getRealm()).users(); - return usersResource.create(newUser); - } - - public void updateUser(final KeyCloakUserDTO keyCloakUserDTO) { - logger.info("updating user {} in keycloak", keyCloakUserDTO); - Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); - UserResource userResource = keycloakInstance.realm(keycloakConfig.getRealm()).users().get(keyCloakUserDTO.getUsername()); - if(userResource!=null) { - UserRepresentation user = userResource.toRepresentation(); - if(keyCloakUserDTO.getName()!=null && !keyCloakUserDTO.getName().isEmpty()) - user.setFirstName(keyCloakUserDTO.getName()); - - if(keyCloakUserDTO.getLastName()!=null && !keyCloakUserDTO.getLastName().isEmpty()) - user.setLastName(keyCloakUserDTO.getLastName()); - - if(keyCloakUserDTO.getPhoneNumber() != null && !keyCloakUserDTO.getPhoneNumber().isEmpty()) - user.singleAttribute("phoneNumber",keyCloakUserDTO.getPhoneNumber()); - - if(keyCloakUserDTO.getEmail() != null && !keyCloakUserDTO.getEmail().isEmpty()) - user.setEmail(keyCloakUserDTO.getEmail()); - - userResource.update(user); - } else { - logger.info("user {} was not not found. update failed.", keyCloakUserDTO); - } - } - - public List listUser() { - logger.info("listing user in keycloak"); - Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); - return keycloakInstance.realm(keycloakConfig.getRealm()).users().list(); - } - - public void activateUser(final String userName){ - logger.info("activating user:{} in keycloak",userName); - Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); - UserResource userResource = keycloakInstance.realm(keycloakConfig.getRealm()).users().get(userName); - UserRepresentation user = userResource.toRepresentation(); - user.setEnabled(true); - } - - public void deactivateUser(final String userName) { - logger.info("deActivating user:{} in keycloak",userName); - Keycloak keycloakInstance = keycloakConfig.getKeycloakInstance(); - UserResource userResource = keycloakInstance.realm(keycloakConfig.getRealm()).users().get(userName); - UserRepresentation user = userResource.toRepresentation(); - user.setEnabled(false); - } - - public UserRepresentation createUserRepresentation(final KeyCloakUserDTO keyCloakUserDTO) { - UserRepresentation newUser = new UserRepresentation(); - newUser.setEnabled(true); - newUser.setEmail(keyCloakUserDTO.getEmail()); - newUser.setEmailVerified(true); - newUser.setUsername(keyCloakUserDTO.getEmail()); - newUser.setFirstName(keyCloakUserDTO.getName()); - newUser.setLastName(keyCloakUserDTO.getLastName()); - newUser.singleAttribute("phoneNumber",keyCloakUserDTO.getPhoneNumber()); - newUser.singleAttribute("aadharNumber",keyCloakUserDTO.getAadharNumber()); - newUser.singleAttribute("activeStatus",keyCloakUserDTO.getActiveStatus()); - newUser.singleAttribute("instituteDistrict",keyCloakUserDTO.getInstituteDistrict()); - newUser.singleAttribute("instituteID",keyCloakUserDTO.getInstituteID()); - newUser.singleAttribute("instituteName",keyCloakUserDTO.getInstituteName()); - newUser.singleAttribute("registerNumber",keyCloakUserDTO.getRegisterNumber()); - List roles = new ArrayList<>(); - roles.add(keyCloakUserDTO.getRole()); - newUser.setRealmRoles(roles); - CredentialRepresentation credentialRepresentation = new CredentialRepresentation(); - credentialRepresentation.setValue(keyCloakUserDTO.getPassword()); - credentialRepresentation.setType("password"); - newUser.setCredentials(Collections.singletonList(credentialRepresentation)); - return newUser; - } - -} diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java new file mode 100644 index 0000000..bee7e24 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java @@ -0,0 +1,76 @@ +package com.tarento.upsmf.userManagement.utility; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.tarento.upsmf.userManagement.services.UserService; +import org.apache.http.HttpHeaders; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.IOException; + +@Component +@PropertySource({ "classpath:application.properties" }) +public class KeycloakTokenRetriever { + + private static final Logger logger = LoggerFactory.getLogger(KeycloakTokenRetriever.class); + + @Autowired + private Environment env; + + private static Environment environment; + + private String ADMIN_TOKEN_ENDPOINT; + + private String ADMIN_TOKEN_SECRET; + + private String ADMIN_USERNAME; + private String ADMIN_PASSWORD; + + private ObjectMapper mapper = new ObjectMapper(); + + @PostConstruct + public void init(){ + environment = env; + ADMIN_TOKEN_ENDPOINT = getPopertyValue("adminToken.endPoint"); + ADMIN_TOKEN_SECRET = getPopertyValue("adminToken.clientSecret"); + ADMIN_USERNAME = getPopertyValue("adminToken.userName"); + ADMIN_PASSWORD = getPopertyValue("adminToken.password"); + } + + public static String getPopertyValue(String property){ + return environment.getProperty(property); + } + public JsonNode getAdminToken() throws IOException { + String tokenEndpoint = ADMIN_TOKEN_ENDPOINT; + + HttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(tokenEndpoint); + + httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded"); + + String requestBody = "username=" + ADMIN_USERNAME + + "&password=" + ADMIN_PASSWORD + + "&grant_type=client_credentials" + + "&client_id=admin-cli" + + "&client_secret=" + ADMIN_TOKEN_SECRET; + + StringEntity entity = new StringEntity(requestBody); + httpPost.setEntity(entity); + + org.apache.http.HttpResponse response = httpClient.execute(httpPost); + String responseBody = EntityUtils.toString(response.getEntity()); + JsonNode jsonNode = mapper.readTree(responseBody); + return jsonNode; + } +} diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java new file mode 100644 index 0000000..e2cfc72 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java @@ -0,0 +1,68 @@ +package com.tarento.upsmf.userManagement.utility; + +import com.fasterxml.jackson.databind.JsonNode; +import org.apache.http.HttpHeaders; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.IOException; + + +@Component +@PropertySource({ "classpath:application.properties" }) +public class KeycloakUserActivateDeActivate { + + private static final Logger logger = LoggerFactory.getLogger(KeycloakUserActivateDeActivate.class); + + @Autowired + private Environment env; + + @Autowired + private KeycloakTokenRetriever keycloakTokenRetriever; + + private static Environment environment; + + private String KEYCLOAK_USER_BASE_URL; + + @PostConstruct + public void init(){ + environment = env; + KEYCLOAK_USER_BASE_URL = getPopertyValue("keycloak.user.baseURL"); + } + + public static String getPopertyValue(String property){ + return environment.getProperty(property); + } + public String activateDeactivatUser(final String userName, boolean activate) throws IOException { + String userEndpoint = KEYCLOAK_USER_BASE_URL + "/" + userName; + logger.info("User {} is being acivated ? : {} with userEndPoint : {}",userName, activate, userEndpoint); + JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); + String accessToken = adminToken.get("access_token").asText(); + + HttpClient httpClient = HttpClients.createDefault(); + HttpPut httpPut = new HttpPut(userEndpoint); + + httpPut.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); + httpPut.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); + + String requestBody = "{\"enabled\": " + activate + "}"; + + StringEntity entity = new StringEntity(requestBody); + httpPut.setEntity(entity); + + org.apache.http.HttpResponse response = httpClient.execute(httpPut); + String responseBody = EntityUtils.toString(response.getEntity()); + logger.info("Response {}", responseBody); + return requestBody; + } +} diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java new file mode 100644 index 0000000..1e397e6 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java @@ -0,0 +1,82 @@ +package com.tarento.upsmf.userManagement.utility; + +import com.fasterxml.jackson.databind.JsonNode; +import org.apache.http.HttpHeaders; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.IOException; + +@Component +@PropertySource({ "classpath:application.properties" }) +public class KeycloakUserCreator { + + private static final Logger logger = LoggerFactory.getLogger(KeycloakUserCreator.class); + + @Autowired + private Environment env; + + @Autowired + private KeycloakTokenRetriever keycloakTokenRetriever; + + private static Environment environment; + + private String KEYCLOAK_USER_BASE_URL; + + @PostConstruct + public void init(){ + environment = env; + KEYCLOAK_USER_BASE_URL = getPopertyValue("keycloak.user.baseURL"); + } + + public static String getPopertyValue(String property){ + return environment.getProperty(property); + } + public String createUser(final JsonNode body) throws IOException { + String keycloakBaseUrl = KEYCLOAK_USER_BASE_URL; + JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); + String accessToken = adminToken.get("access_token").asText(); + HttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(keycloakBaseUrl); + + httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); + httpPost.setHeader(HttpHeaders.ACCEPT, "application/json"); + httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8"); + JsonNode request = body.get("request"); + String userName = request.get("userName").asText(); + String firstName = request.get("firstName").asText(); + String lastName = request.get("lastname").asText(); + String email = request.get("email").asText(); + String password = request.get("password").asText(); + String requestBody = "{" + + "\"enabled\": true," + + "\"username\": " + "\"" +userName + "\"" + "," + + "\"email\": " + "\"" + email + "\"" + "," + + "\"firstName\": " + "\"" + firstName + "\"" + "," + + "\"lastName\": " + "\"" + lastName + "\"" + "," + + "\"credentials\": [{" + + "\"type\": \"password\"," + + "\"value\": " + "\"" + password + "\"" + "," + + "\"temporary\": false" + + "}]" + + "}"; + + StringEntity entity = new StringEntity(requestBody); + httpPost.setEntity(entity); + + HttpResponse response = httpClient.execute(httpPost); + String responseBody = EntityUtils.toString(response.getEntity()); + return responseBody; + } +} diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java new file mode 100644 index 0000000..21bbaf8 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java @@ -0,0 +1,62 @@ +package com.tarento.upsmf.userManagement.utility; + +import com.fasterxml.jackson.databind.JsonNode; +import org.apache.http.HttpHeaders; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.IOException; + +@Component +@PropertySource({ "classpath:application.properties" }) +public class KeycloakUserGetter { + + private static final Logger logger = LoggerFactory.getLogger(KeycloakUserCreator.class); + + @Autowired + private Environment env; + + private static Environment environment; + + private String KEYCLOAK_USER_BASE_URL; + + @Autowired + private KeycloakTokenRetriever keycloakTokenRetriever; + + @PostConstruct + public void init(){ + environment = env; + KEYCLOAK_USER_BASE_URL = getPopertyValue("keycloak.user.baseURL"); + } + + public static String getPopertyValue(String property){ + return environment.getProperty(property); + } + public String findUser(final String userID) throws IOException { + String userEndpoint = KEYCLOAK_USER_BASE_URL; + if(userID != null ) { + userEndpoint = userEndpoint + "/" + userID; + } + JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); + String accessToken = adminToken.get("access_token").asText(); + + HttpClient httpClient = HttpClients.createDefault(); + HttpGet httpGet = new HttpGet(userEndpoint); + + httpGet.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); + httpGet.setHeader(HttpHeaders.ACCEPT, "application/json"); + + org.apache.http.HttpResponse response = httpClient.execute(httpGet); + String responseBody = EntityUtils.toString(response.getEntity()); + return responseBody; + } +} diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java new file mode 100644 index 0000000..9177a99 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java @@ -0,0 +1,45 @@ +package com.tarento.upsmf.userManagement.utility; + +import org.apache.http.HttpHeaders; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +import java.io.IOException; + +public class KeycloakUserUpdater { + public static void main(String[] args) throws IOException { + String keycloakBaseUrl = "http://localhost:8080/auth/admin/realms/example/users"; + String accessToken = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUM3F6M0t6TnNYamx2ZmNVX1FKY1R6eHJJUjgwNGlKWnktaE1uSU96dktrIn0.eyJqdGkiOiIyZmYyNjU3NS0yMTE4LTQzYjctYmYxNi05MzIzOTc5ZjAxOTEiLCJleHAiOjE2OTIxMDU5MDMsIm5iZiI6MCwiaWF0IjoxNjkyMTA1ODQzLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvbWFzdGVyIiwic3ViIjoiM2UxOGExYjMtYTM5YS00MDhhLWIwYmYtMjJhMWJkOGY4ZDk1IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoic2VjdXJpdHktYWRtaW4tY29uc29sZSIsIm5vbmNlIjoiYzU5YzM4NGYtOTY5My00ODdkLTg0OGQtNmFmYmViMGM0ODM4IiwiYXV0aF90aW1lIjoxNjkyMTA0Njk5LCJzZXNzaW9uX3N0YXRlIjoiNTY5NTlhN2QtNjBjYi00YzI5LTg0ZmQtNGNkYjdhYzA0N2U0IiwiYWNyIjoiMSIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsIm5hbWUiOiJtYWhlc2ggbWFuZXkgciIsInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZ2l2ZW5fbmFtZSI6Im1haGVzaCIsImZhbWlseV9uYW1lIjoibWFuZXkgciIsImVtYWlsIjoibWFoZXNoLm1hbmV5QGdtYWlsLmNvbSJ9.LeSON6AeD__ZRI5D2Dexca51tF4vP2BrP4y1H3y_BdrGKy6Gu_QV5bTtjuqjiY8txM-C9ADd7jSXohtpPWHdcgj_bSAaFwWR3U0NliKBusXgSgQpyyCZ5aCkT7JYICZnG2_nvEC6AN1YCuc_hglwEhksWaNoU0KbnjTxnSDxb2HPhM7mYkkObMLZpqpyavYls5JpSaer-n6zNaPh7snyy-EhyXralYaqq0nXJ5uIsIjXxp9NSBchbi4KD-K0xCwRFAWInNkXJcPVKsWv2_nImuUOX_k56ePVQrRZN2KAb7pcuv2T7F4N3gTItt_UUlPdHXMGN3M10M8Ndun_4L7cVw"; // Replace with your access token + + HttpClient httpClient = HttpClients.createDefault(); + HttpPut httpPut = new HttpPut(keycloakBaseUrl); + + httpPut.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); + httpPut.setHeader(HttpHeaders.ACCEPT, "application/json, text/plain, */*"); + httpPut.setHeader(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8"); + + String requestBody = "{" + + "\"enabled\": true," + + "\"attributes\": {}," + + "\"username\": \"def.ghi@yopmail.com\"," + + "\"emailVerified\": true" + + "}"; + + StringEntity entity = new StringEntity(requestBody); + httpPut.setEntity(entity); + + HttpResponse response = httpClient.execute(httpPut); + String responseBody = EntityUtils.toString(response.getEntity()); + + if (response.getStatusLine().getStatusCode() == 204) { + System.out.println("User updated successfully."); + } else { + System.out.println("Failed to update user."); + System.out.println("Response: " + responseBody); + } + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index cc75c10..015f5c9 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -7,11 +7,9 @@ otp.password = otp.senderID = otp.baseUrl = keycloak_BaseURL = /api/v1 -keycloak.auth-server-url = http://localhost:8080/auth -keycloak.realm = sunbird-rc -keycloak.client-id = f03ca618-411d-41d7-8168-41fa159c3fda -keycloak.credentials.secret = admin-api -keycloak.admin-username = admin -keycloak.admin-password = admin -keycloak.grant-type = password +adminToken.endPoint =http://localhost:8080/auth/realms/master/protocol/openid-connect/token +adminToken.clientSecret =2fbb157c-24f0-48cb-83d8-bc85eb4fb982 +adminToken.userName =admin +adminToken.password =Welcome@123 +keycloak.user.baseURL =http://localhost:8080/auth/admin/realms/example/users From 97b84754ad3a8d9c861dfa058d7e45111592be00 Mon Sep 17 00:00:00 2001 From: lakshmikommalapati Date: Wed, 16 Aug 2023 11:42:00 +0530 Subject: [PATCH 21/87] added the logs in utility package classes --- .../userManagement/utility/KeycloakTokenRetriever.java | 4 +++- .../upsmf/userManagement/utility/KeycloakUserCreator.java | 6 +++++- .../upsmf/userManagement/utility/KeycloakUserGetter.java | 5 +++++ .../upsmf/userManagement/utility/KeycloakUserUpdater.java | 8 ++++++-- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java index bee7e24..2fdd2a4 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java @@ -53,7 +53,7 @@ public static String getPopertyValue(String property){ } public JsonNode getAdminToken() throws IOException { String tokenEndpoint = ADMIN_TOKEN_ENDPOINT; - + logger.info("Token endpoint: {}" ,tokenEndpoint); HttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(tokenEndpoint); @@ -65,11 +65,13 @@ public JsonNode getAdminToken() throws IOException { "&client_id=admin-cli" + "&client_secret=" + ADMIN_TOKEN_SECRET; + logger.info("Request body: {}", requestBody); StringEntity entity = new StringEntity(requestBody); httpPost.setEntity(entity); org.apache.http.HttpResponse response = httpClient.execute(httpPost); String responseBody = EntityUtils.toString(response.getEntity()); + logger.info("Response body: {}", responseBody); JsonNode jsonNode = mapper.readTree(responseBody); return jsonNode; } diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java index 1e397e6..5f85ab8 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java @@ -45,8 +45,11 @@ public static String getPopertyValue(String property){ } public String createUser(final JsonNode body) throws IOException { String keycloakBaseUrl = KEYCLOAK_USER_BASE_URL; + logger.info("keycloakBaseUrl: " ,keycloakBaseUrl); JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); + logger.info("adminToken: {}" ,adminToken); String accessToken = adminToken.get("access_token").asText(); + logger.info("accessToken: {}" ,accessToken); HttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(keycloakBaseUrl); @@ -71,12 +74,13 @@ public String createUser(final JsonNode body) throws IOException { "\"temporary\": false" + "}]" + "}"; - + logger.info("Request body: {}", requestBody); StringEntity entity = new StringEntity(requestBody); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); String responseBody = EntityUtils.toString(response.getEntity()); + logger.info("ResponseBody {}", responseBody); return responseBody; } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java index 21bbaf8..58182a6 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java @@ -43,11 +43,15 @@ public static String getPopertyValue(String property){ } public String findUser(final String userID) throws IOException { String userEndpoint = KEYCLOAK_USER_BASE_URL; + logger.info("userEndpoint: " ,userEndpoint); if(userID != null ) { userEndpoint = userEndpoint + "/" + userID; } + logger.info("userEndpoint after adding useerId : " ,userEndpoint); JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); + logger.info("adminToken: " ,adminToken); String accessToken = adminToken.get("access_token").asText(); + logger.info("accessToken: " ,accessToken); HttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(userEndpoint); @@ -57,6 +61,7 @@ public String findUser(final String userID) throws IOException { org.apache.http.HttpResponse response = httpClient.execute(httpGet); String responseBody = EntityUtils.toString(response.getEntity()); + logger.info("ResponseBody {}", responseBody); return responseBody; } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java index 9177a99..df3b7b1 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java @@ -7,10 +7,14 @@ import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; public class KeycloakUserUpdater { + + private static final Logger logger = LoggerFactory.getLogger(KeycloakUserUpdater.class); public static void main(String[] args) throws IOException { String keycloakBaseUrl = "http://localhost:8080/auth/admin/realms/example/users"; String accessToken = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUM3F6M0t6TnNYamx2ZmNVX1FKY1R6eHJJUjgwNGlKWnktaE1uSU96dktrIn0.eyJqdGkiOiIyZmYyNjU3NS0yMTE4LTQzYjctYmYxNi05MzIzOTc5ZjAxOTEiLCJleHAiOjE2OTIxMDU5MDMsIm5iZiI6MCwiaWF0IjoxNjkyMTA1ODQzLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvbWFzdGVyIiwic3ViIjoiM2UxOGExYjMtYTM5YS00MDhhLWIwYmYtMjJhMWJkOGY4ZDk1IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoic2VjdXJpdHktYWRtaW4tY29uc29sZSIsIm5vbmNlIjoiYzU5YzM4NGYtOTY5My00ODdkLTg0OGQtNmFmYmViMGM0ODM4IiwiYXV0aF90aW1lIjoxNjkyMTA0Njk5LCJzZXNzaW9uX3N0YXRlIjoiNTY5NTlhN2QtNjBjYi00YzI5LTg0ZmQtNGNkYjdhYzA0N2U0IiwiYWNyIjoiMSIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsIm5hbWUiOiJtYWhlc2ggbWFuZXkgciIsInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZ2l2ZW5fbmFtZSI6Im1haGVzaCIsImZhbWlseV9uYW1lIjoibWFuZXkgciIsImVtYWlsIjoibWFoZXNoLm1hbmV5QGdtYWlsLmNvbSJ9.LeSON6AeD__ZRI5D2Dexca51tF4vP2BrP4y1H3y_BdrGKy6Gu_QV5bTtjuqjiY8txM-C9ADd7jSXohtpPWHdcgj_bSAaFwWR3U0NliKBusXgSgQpyyCZ5aCkT7JYICZnG2_nvEC6AN1YCuc_hglwEhksWaNoU0KbnjTxnSDxb2HPhM7mYkkObMLZpqpyavYls5JpSaer-n6zNaPh7snyy-EhyXralYaqq0nXJ5uIsIjXxp9NSBchbi4KD-K0xCwRFAWInNkXJcPVKsWv2_nImuUOX_k56ePVQrRZN2KAb7pcuv2T7F4N3gTItt_UUlPdHXMGN3M10M8Ndun_4L7cVw"; // Replace with your access token @@ -28,13 +32,13 @@ public static void main(String[] args) throws IOException { "\"username\": \"def.ghi@yopmail.com\"," + "\"emailVerified\": true" + "}"; - + logger.info("Request body: {}", requestBody); StringEntity entity = new StringEntity(requestBody); httpPut.setEntity(entity); HttpResponse response = httpClient.execute(httpPut); String responseBody = EntityUtils.toString(response.getEntity()); - + logger.info("ResponseBody {}", responseBody); if (response.getStatusLine().getStatusCode() == 204) { System.out.println("User updated successfully."); } else { From 95cdb13ec6350bdcd34bfc719b971cbabaf538f1 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Wed, 16 Aug 2023 18:00:50 +0530 Subject: [PATCH 22/87] add user details api . --- .../userManagement/controller/UserController.java | 5 +++++ .../upsmf/userManagement/handler/UserHandler.java | 7 +++++++ .../userManagement/utility/KeycloakUserCreator.java | 10 ++++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index a757fdd..a088fb4 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -26,6 +26,11 @@ public ResponseEntity updateUser(@RequestBody final JsonNode body) thr return userHandler.updateUser(body); } + @PostMapping(value = "/details", consumes = "application/json", produces = "application/json") + public String userDetails(@RequestBody final JsonNode body) throws URISyntaxException, IOException { + return userHandler.userDetails(body); + } + @PostMapping(value = "/list", consumes = "application/json", produces = "application/json") public String listUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { return userHandler.listUser(body); diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 03d1dc7..c9bc599 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -85,6 +85,13 @@ public ResponseEntity updateUser(final JsonNode body) throws URISynta return null; } + public String userDetails(final JsonNode body) throws IOException { + JsonNode request = body.get("request"); + String userName = keycloakUserGetter.findUser(request.get("userName").asText()); + return userName; + } + + public String listUser(final JsonNode body) throws URISyntaxException, IOException { logger.info("creating user with payload {} ", body.toPrettyString()); String users = keycloakUserGetter.findUser(null); diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java index 5f85ab8..67a8835 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java @@ -1,12 +1,15 @@ package com.tarento.upsmf.userManagement.utility; import com.fasterxml.jackson.databind.JsonNode; +import org.apache.http.Header; import org.apache.http.HttpHeaders; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BufferedHeader; +import org.apache.http.util.CharArrayBuffer; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,6 +20,7 @@ import javax.annotation.PostConstruct; import java.io.IOException; +import java.util.UUID; @Component @PropertySource({ "classpath:application.properties" }) @@ -64,7 +68,7 @@ public String createUser(final JsonNode body) throws IOException { String password = request.get("password").asText(); String requestBody = "{" + "\"enabled\": true," + - "\"username\": " + "\"" +userName + "\"" + "," + + "\"username\": " + "\"" + UUID.randomUUID().toString() + "\"" + "," + "\"email\": " + "\"" + email + "\"" + "," + "\"firstName\": " + "\"" + firstName + "\"" + "," + "\"lastName\": " + "\"" + lastName + "\"" + "," + @@ -79,7 +83,9 @@ public String createUser(final JsonNode body) throws IOException { httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); - String responseBody = EntityUtils.toString(response.getEntity()); + CharArrayBuffer buffer = ((BufferedHeader) response.getHeaders("Location")[0]).getBuffer(); + String resp = new String(buffer.buffer()); + String responseBody = resp.substring(resp.lastIndexOf("/")+1).trim(); logger.info("ResponseBody {}", responseBody); return responseBody; } From 32a855bfd20eb29d5788b490db5fa9f2a716bceb Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Wed, 16 Aug 2023 19:39:27 +0530 Subject: [PATCH 23/87] fix for arrayindexoutofbound exception . --- .../upsmf/userManagement/utility/KeycloakUserCreator.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java index 67a8835..1da9922 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java @@ -83,9 +83,10 @@ public String createUser(final JsonNode body) throws IOException { httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); - CharArrayBuffer buffer = ((BufferedHeader) response.getHeaders("Location")[0]).getBuffer(); + /*CharArrayBuffer buffer = ((BufferedHeader) response.getHeaders("Location")[0]).getBuffer(); String resp = new String(buffer.buffer()); - String responseBody = resp.substring(resp.lastIndexOf("/")+1).trim(); + String responseBody = resp.substring(resp.lastIndexOf("/")+1).trim();*/ + String responseBody = EntityUtils.toString(response.getEntity()); logger.info("ResponseBody {}", responseBody); return responseBody; } From a4d1c01f468e44b8818f158ec3bd6bf1ce5142f2 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 17 Aug 2023 15:20:59 +0530 Subject: [PATCH 24/87] updating changes to create user and list user APIs . --- .../userManagement/handler/UserHandler.java | 30 ++-------- .../utility/KeycloakTokenRetriever.java | 10 ++-- .../KeycloakUserActivateDeActivate.java | 6 +- .../utility/KeycloakUserCreator.java | 48 +++++++-------- .../KeycloakUserCredentialPersister.java | 60 +++++++++++++++++++ .../utility/KeycloakUserGetter.java | 6 +- .../utility/KeycloakUserUpdater.java | 41 ++++++++++--- src/main/resources/application.properties | 1 + 8 files changed, 133 insertions(+), 69 deletions(-) create mode 100644 src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index c9bc599..515e677 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -3,9 +3,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.tarento.upsmf.userManagement.model.KeyCloakUserDTO; import com.tarento.upsmf.userManagement.services.UserService; -import com.tarento.upsmf.userManagement.utility.KeycloakUserActivateDeActivate; -import com.tarento.upsmf.userManagement.utility.KeycloakUserCreator; -import com.tarento.upsmf.userManagement.utility.KeycloakUserGetter; +import com.tarento.upsmf.userManagement.utility.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -29,29 +27,14 @@ public class UserHandler { @Autowired private KeycloakUserGetter keycloakUserGetter; + @Autowired + private KeycloakUserUpdater keycloakUserUpdater; + @Autowired private KeycloakUserActivateDeActivate keycloakUserActivateDeActivate; public ResponseEntity createUser(final JsonNode body) throws URISyntaxException, IOException { logger.info("creating user with payload {} ", body.toPrettyString()); - - JsonNode request = body.get("request"); - KeyCloakUserDTO keyCloakUserDTO = KeyCloakUserDTO.builder() - .email(getorDefault(request,"email","")) - .name(getorDefault(request,"name","")) - .instituteName(getorDefault(request,"instituteName","")) - .instituteID(getorDefault(request,"instituteID","")) - .lastName(getorDefault(request,"lastName","")) - .instituteDistrict(getorDefault(request,"instituteDistrict","")) - .password(getorDefault(request,"password","")) - .role(getorDefault(request,"role","")) - .aadharNumber(getorDefault(request,"aadharNumber","")) - .phoneNumber(getorDefault(request,"phoneNumber","")) - .registerNumber(getorDefault(request,"registerNumber","")) - .activeStatus(getorDefault(request,"activeStatus","")) - .username(UUID.randomUUID().toString()) - .build(); - logger.info("creating user in keycloak with payload {} ", keyCloakUserDTO); String respone = keycloakUserCreator.createUser(body); logger.info("user created ? {}", respone); ResponseEntity user = userService.createUser(body); @@ -77,7 +60,7 @@ public ResponseEntity updateUser(final JsonNode body) throws URISynta .activeStatus(getorDefault(request,"activeStatus","")) .build(); logger.info("updating user in keycloak with payload {} ", keyCloakUserDTO); - String userName = keycloakUserGetter.findUser(request.get("userName").asText()); + keycloakUserUpdater.updateUser(); logger.info("updating user with payload {} ", body.toPrettyString()); ResponseEntity jsonNodeResponseEntity = userService.updateUser(body); @@ -95,9 +78,6 @@ public String userDetails(final JsonNode body) throws IOException { public String listUser(final JsonNode body) throws URISyntaxException, IOException { logger.info("creating user with payload {} ", body.toPrettyString()); String users = keycloakUserGetter.findUser(null); - - ResponseEntity jsonNodeResponseEntity = userService.listUser(body); - return users; } diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java index 2fdd2a4..02ad52f 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java @@ -42,13 +42,13 @@ public class KeycloakTokenRetriever { @PostConstruct public void init(){ environment = env; - ADMIN_TOKEN_ENDPOINT = getPopertyValue("adminToken.endPoint"); - ADMIN_TOKEN_SECRET = getPopertyValue("adminToken.clientSecret"); - ADMIN_USERNAME = getPopertyValue("adminToken.userName"); - ADMIN_PASSWORD = getPopertyValue("adminToken.password"); + ADMIN_TOKEN_ENDPOINT = getPropertyValue("adminToken.endPoint"); + ADMIN_TOKEN_SECRET = getPropertyValue("adminToken.clientSecret"); + ADMIN_USERNAME = getPropertyValue("adminToken.userName"); + ADMIN_PASSWORD = getPropertyValue("adminToken.password"); } - public static String getPopertyValue(String property){ + public static String getPropertyValue(String property){ return environment.getProperty(property); } public JsonNode getAdminToken() throws IOException { diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java index e2cfc72..9a3037b 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java @@ -37,15 +37,15 @@ public class KeycloakUserActivateDeActivate { @PostConstruct public void init(){ environment = env; - KEYCLOAK_USER_BASE_URL = getPopertyValue("keycloak.user.baseURL"); + KEYCLOAK_USER_BASE_URL = getPropertyValue("keycloak.user.baseURL"); } - public static String getPopertyValue(String property){ + public static String getPropertyValue(String property){ return environment.getProperty(property); } public String activateDeactivatUser(final String userName, boolean activate) throws IOException { String userEndpoint = KEYCLOAK_USER_BASE_URL + "/" + userName; - logger.info("User {} is being acivated ? : {} with userEndPoint : {}",userName, activate, userEndpoint); + logger.info("User {} is being activated ? : {} with userEndPoint : {}",userName, activate, userEndpoint); JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); String accessToken = adminToken.get("access_token").asText(); diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java index 1da9922..bd086f1 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java @@ -1,6 +1,8 @@ package com.tarento.upsmf.userManagement.utility; import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.http.Header; import org.apache.http.HttpHeaders; import org.apache.http.HttpResponse; @@ -34,6 +36,9 @@ public class KeycloakUserCreator { @Autowired private KeycloakTokenRetriever keycloakTokenRetriever; + @Autowired + private KeycloakUserCredentialPersister keycloakUserCredentialPersister; + private static Environment environment; private String KEYCLOAK_USER_BASE_URL; @@ -41,13 +46,14 @@ public class KeycloakUserCreator { @PostConstruct public void init(){ environment = env; - KEYCLOAK_USER_BASE_URL = getPopertyValue("keycloak.user.baseURL"); + KEYCLOAK_USER_BASE_URL = getPropertyValue("keycloak.user.baseURL"); } - public static String getPopertyValue(String property){ + public static String getPropertyValue(String property){ return environment.getProperty(property); } - public String createUser(final JsonNode body) throws IOException { + public String createUser(final JsonNode request) throws IOException { + JsonNode body = request.get("request"); String keycloakBaseUrl = KEYCLOAK_USER_BASE_URL; logger.info("keycloakBaseUrl: " ,keycloakBaseUrl); JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); @@ -60,33 +66,23 @@ public String createUser(final JsonNode body) throws IOException { httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); httpPost.setHeader(HttpHeaders.ACCEPT, "application/json"); httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8"); - JsonNode request = body.get("request"); - String userName = request.get("userName").asText(); - String firstName = request.get("firstName").asText(); - String lastName = request.get("lastname").asText(); - String email = request.get("email").asText(); - String password = request.get("password").asText(); - String requestBody = "{" + - "\"enabled\": true," + - "\"username\": " + "\"" + UUID.randomUUID().toString() + "\"" + "," + - "\"email\": " + "\"" + email + "\"" + "," + - "\"firstName\": " + "\"" + firstName + "\"" + "," + - "\"lastName\": " + "\"" + lastName + "\"" + "," + - "\"credentials\": [{" + - "\"type\": \"password\"," + - "\"value\": " + "\"" + password + "\"" + "," + - "\"temporary\": false" + - "}]" + - "}"; - logger.info("Request body: {}", requestBody); - StringEntity entity = new StringEntity(requestBody); + String userName = UUID.randomUUID().toString(); + ((ObjectNode)body).put("username",userName); + logger.info("Request body: {}", body); + StringEntity entity = new StringEntity(body.toPrettyString()); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); - /*CharArrayBuffer buffer = ((BufferedHeader) response.getHeaders("Location")[0]).getBuffer(); - String resp = new String(buffer.buffer()); - String responseBody = resp.substring(resp.lastIndexOf("/")+1).trim();*/ String responseBody = EntityUtils.toString(response.getEntity()); + if (response.getStatusLine().getStatusCode() == 201) { + String password = ((ArrayNode)body.get("credentials")).get(0).get("value").asText(); + try { + String strResponse = keycloakUserCredentialPersister.persistUserInfo(userName, password); + }catch (Exception ex){ + ex.printStackTrace(); + } + responseBody = "200"; + } logger.info("ResponseBody {}", responseBody); return responseBody; } diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java new file mode 100644 index 0000000..d492a9d --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java @@ -0,0 +1,60 @@ +package com.tarento.upsmf.userManagement.utility; + +import org.apache.http.HttpHeaders; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.util.UUID; + +@Component +@PropertySource({ "classpath:application.properties" }) +public class KeycloakUserCredentialPersister { + + private static final Logger logger = LoggerFactory.getLogger(KeycloakUserCredentialPersister.class); + + @Autowired + private Environment env; + + @Autowired + private KeycloakUserActivateDeActivate keycloakUserActivateDeActivate; + + private static Environment environment; + + private String REGISTRYENDPOINTSAVEUSERINFO; + + @PostConstruct + public void init(){ + environment = env; + REGISTRYENDPOINTSAVEUSERINFO = getPropertyValue("registry.endpoint.save.userinfo"); + } + + public static String getPropertyValue(String property){ + return environment.getProperty(property); + } + public String persistUserInfo(final String userName, final String password) throws IOException { + + HttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(REGISTRYENDPOINTSAVEUSERINFO); + httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); + String requestBody = "{" + + "\"username\": " + "\"" + userName + "\"" + "," + + "\"password\": " + "\"" + password + "\"" + "," + + "}"; + StringEntity entity = new StringEntity(requestBody); + httpPost.setEntity(entity); + org.apache.http.HttpResponse response = httpClient.execute(httpPost); + String responseBody = EntityUtils.toString(response.getEntity()); + return responseBody; + } +} diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java index 58182a6..dc6e403 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java @@ -35,10 +35,10 @@ public class KeycloakUserGetter { @PostConstruct public void init(){ environment = env; - KEYCLOAK_USER_BASE_URL = getPopertyValue("keycloak.user.baseURL"); + KEYCLOAK_USER_BASE_URL = getPropertyValue("keycloak.user.baseURL"); } - public static String getPopertyValue(String property){ + public static String getPropertyValue(String property){ return environment.getProperty(property); } public String findUser(final String userID) throws IOException { @@ -47,7 +47,7 @@ public String findUser(final String userID) throws IOException { if(userID != null ) { userEndpoint = userEndpoint + "/" + userID; } - logger.info("userEndpoint after adding useerId : " ,userEndpoint); + logger.info("userEndpoint after adding userId : " ,userEndpoint); JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); logger.info("adminToken: " ,adminToken); String accessToken = adminToken.get("access_token").asText(); diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java index df3b7b1..5cff639 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java @@ -1,5 +1,6 @@ package com.tarento.upsmf.userManagement.utility; +import com.fasterxml.jackson.databind.JsonNode; import org.apache.http.HttpHeaders; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; @@ -9,27 +10,53 @@ import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; import java.io.IOException; +@Component +@PropertySource({ "classpath:application.properties" }) public class KeycloakUserUpdater { + @Autowired + private Environment env; + + @Autowired + private KeycloakTokenRetriever keycloakTokenRetriever; + private static Environment environment; private static final Logger logger = LoggerFactory.getLogger(KeycloakUserUpdater.class); - public static void main(String[] args) throws IOException { - String keycloakBaseUrl = "http://localhost:8080/auth/admin/realms/example/users"; - String accessToken = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJUM3F6M0t6TnNYamx2ZmNVX1FKY1R6eHJJUjgwNGlKWnktaE1uSU96dktrIn0.eyJqdGkiOiIyZmYyNjU3NS0yMTE4LTQzYjctYmYxNi05MzIzOTc5ZjAxOTEiLCJleHAiOjE2OTIxMDU5MDMsIm5iZiI6MCwiaWF0IjoxNjkyMTA1ODQzLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgwODAvYXV0aC9yZWFsbXMvbWFzdGVyIiwic3ViIjoiM2UxOGExYjMtYTM5YS00MDhhLWIwYmYtMjJhMWJkOGY4ZDk1IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoic2VjdXJpdHktYWRtaW4tY29uc29sZSIsIm5vbmNlIjoiYzU5YzM4NGYtOTY5My00ODdkLTg0OGQtNmFmYmViMGM0ODM4IiwiYXV0aF90aW1lIjoxNjkyMTA0Njk5LCJzZXNzaW9uX3N0YXRlIjoiNTY5NTlhN2QtNjBjYi00YzI5LTg0ZmQtNGNkYjdhYzA0N2U0IiwiYWNyIjoiMSIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsIm5hbWUiOiJtYWhlc2ggbWFuZXkgciIsInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZ2l2ZW5fbmFtZSI6Im1haGVzaCIsImZhbWlseV9uYW1lIjoibWFuZXkgciIsImVtYWlsIjoibWFoZXNoLm1hbmV5QGdtYWlsLmNvbSJ9.LeSON6AeD__ZRI5D2Dexca51tF4vP2BrP4y1H3y_BdrGKy6Gu_QV5bTtjuqjiY8txM-C9ADd7jSXohtpPWHdcgj_bSAaFwWR3U0NliKBusXgSgQpyyCZ5aCkT7JYICZnG2_nvEC6AN1YCuc_hglwEhksWaNoU0KbnjTxnSDxb2HPhM7mYkkObMLZpqpyavYls5JpSaer-n6zNaPh7snyy-EhyXralYaqq0nXJ5uIsIjXxp9NSBchbi4KD-K0xCwRFAWInNkXJcPVKsWv2_nImuUOX_k56ePVQrRZN2KAb7pcuv2T7F4N3gTItt_UUlPdHXMGN3M10M8Ndun_4L7cVw"; // Replace with your access token + private String KEYCLOAK_USER_BASE_URL; + + @PostConstruct + public void init(){ + environment = env; + KEYCLOAK_USER_BASE_URL = getPropertyValue("keycloak.user.baseURL"); + } + + public static String getPropertyValue(String property){ + return environment.getProperty(property); + } + + public void updateUser() throws IOException { + JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); + logger.info("adminToken: {}" ,adminToken); + String accessToken = adminToken.get("access_token").asText(); HttpClient httpClient = HttpClients.createDefault(); - HttpPut httpPut = new HttpPut(keycloakBaseUrl); + HttpPut httpPut = new HttpPut(KEYCLOAK_USER_BASE_URL); httpPut.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); httpPut.setHeader(HttpHeaders.ACCEPT, "application/json, text/plain, */*"); httpPut.setHeader(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8"); String requestBody = "{" + - "\"enabled\": true," + - "\"attributes\": {}," + - "\"username\": \"def.ghi@yopmail.com\"," + + "\"firstName\": true," + + "\"lastName\": {}," + + "\"email\": \"def.ghi@yopmail.com\"," + "\"emailVerified\": true" + "}"; logger.info("Request body: {}", requestBody); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 015f5c9..bcdd5c4 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -12,4 +12,5 @@ adminToken.clientSecret =2fbb157c-24f0-48cb-83d8-bc85eb4fb982 adminToken.userName =admin adminToken.password =Welcome@123 keycloak.user.baseURL =http://localhost:8080/auth/admin/realms/example/users +registry.endpoint.save.userinfo =http://localhost:8001/api/v1/keycloak/persist/userCredential From 6147178f715757eb417c93a9fe4f8f34100af4fa Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 17 Aug 2023 16:01:43 +0530 Subject: [PATCH 25/87] fixing update user API . --- .../controller/UserController.java | 2 +- .../userManagement/handler/UserHandler.java | 35 ++++++------------- .../utility/KeycloakUserUpdater.java | 25 ++++++------- 3 files changed, 22 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index a088fb4..0c4d00b 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -22,7 +22,7 @@ public ResponseEntity createUser(@RequestBody final JsonNode body) thr } @PutMapping(value = "/update", consumes = "application/json", produces = "application/json") - public ResponseEntity updateUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { + public String updateUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { return userHandler.updateUser(body); } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 515e677..f306e08 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -41,31 +41,18 @@ public ResponseEntity createUser(final JsonNode body) throws URISynta return user; } - public ResponseEntity updateUser(final JsonNode body) throws URISyntaxException, IOException { - + public String updateUser(final JsonNode body) throws URISyntaxException, IOException { JsonNode request = body.get("request"); - KeyCloakUserDTO keyCloakUserDTO = KeyCloakUserDTO.builder() - .email(getorDefault(request,"email","")) - .name(getorDefault(request,"name","")) - .instituteName(getorDefault(request,"instituteName","")) - .instituteID(getorDefault(request,"instituteID","")) - .lastName(getorDefault(request,"lastName","")) - .instituteDistrict(getorDefault(request,"instituteDistrict","")) - .password(getorDefault(request,"password","")) - .role(getorDefault(request,"role","")) - .aadharNumber(getorDefault(request,"aadharNumber","")) - .phoneNumber(getorDefault(request,"phoneNumber","")) - .username(getorDefault(request,"username","")) - .registerNumber(getorDefault(request,"registerNumber","")) - .activeStatus(getorDefault(request,"activeStatus","")) - .build(); - logger.info("updating user in keycloak with payload {} ", keyCloakUserDTO); - keycloakUserUpdater.updateUser(); - - logger.info("updating user with payload {} ", body.toPrettyString()); - ResponseEntity jsonNodeResponseEntity = userService.updateUser(body); - - return null; + logger.info("updating user in keycloak with payload {} ", body.toPrettyString()); + String userName = body.get("userName").asText(); + String respone = keycloakUserUpdater.updateUser(request, userName); + logger.info("updating user with payload {} ", request.toPrettyString()); + try { + ResponseEntity jsonNodeResponseEntity = userService.updateUser(body); + } catch (Exception exception){ + logger.error("Exception while updating user info.", exception); + } + return respone; } public String userDetails(final JsonNode body) throws IOException { diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java index 5cff639..20917a7 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java @@ -42,35 +42,30 @@ public static String getPropertyValue(String property){ return environment.getProperty(property); } - public void updateUser() throws IOException { + public String updateUser(final JsonNode requestBody, final String userName) throws IOException { JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); logger.info("adminToken: {}" ,adminToken); String accessToken = adminToken.get("access_token").asText(); HttpClient httpClient = HttpClients.createDefault(); - HttpPut httpPut = new HttpPut(KEYCLOAK_USER_BASE_URL); + HttpPut httpPut = new HttpPut(KEYCLOAK_USER_BASE_URL + "/" + userName); httpPut.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); httpPut.setHeader(HttpHeaders.ACCEPT, "application/json, text/plain, */*"); httpPut.setHeader(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8"); - - String requestBody = "{" + - "\"firstName\": true," + - "\"lastName\": {}," + - "\"email\": \"def.ghi@yopmail.com\"," + - "\"emailVerified\": true" + - "}"; logger.info("Request body: {}", requestBody); - StringEntity entity = new StringEntity(requestBody); + StringEntity entity = new StringEntity(requestBody.toPrettyString()); httpPut.setEntity(entity); - HttpResponse response = httpClient.execute(httpPut); - String responseBody = EntityUtils.toString(response.getEntity()); + String responseBody = ""; + if(response.getEntity() != null) { + responseBody = EntityUtils.toString(response.getEntity()); + } logger.info("ResponseBody {}", responseBody); if (response.getStatusLine().getStatusCode() == 204) { - System.out.println("User updated successfully."); + responseBody = " Status 200. User updated successfully."; } else { - System.out.println("Failed to update user."); - System.out.println("Response: " + responseBody); + responseBody = "Failed to update user." + responseBody; } + return responseBody; } } From 79ec4c98d580d5fdf421aa088d9504467c6f57ce Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 18 Aug 2023 15:16:12 +0530 Subject: [PATCH 26/87] adding try-catch . --- .../controller/UserController.java | 2 +- .../userManagement/handler/UserHandler.java | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 0c4d00b..96ab0c0 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -17,7 +17,7 @@ public class UserController { private UserHandler userHandler; @PostMapping(value = "/create", consumes = "application/json", produces = "application/json") - public ResponseEntity createUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { + public String createUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { return userHandler.createUser(body); } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index f306e08..98b50af 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -33,12 +33,18 @@ public class UserHandler { @Autowired private KeycloakUserActivateDeActivate keycloakUserActivateDeActivate; - public ResponseEntity createUser(final JsonNode body) throws URISyntaxException, IOException { + public String createUser(final JsonNode body) throws URISyntaxException, IOException { logger.info("creating user with payload {} ", body.toPrettyString()); - String respone = keycloakUserCreator.createUser(body); - logger.info("user created ? {}", respone); - ResponseEntity user = userService.createUser(body); - return user; + String response = keycloakUserCreator.createUser(body); + logger.info("user created ? {}", response); + try { + ResponseEntity user = userService.createUser(body); + logger.info("user created on ed {}",user); + user.toString(); + } catch (Exception e){ + logger.error("Error Occured",e); + } + return response; } public String updateUser(final JsonNode body) throws URISyntaxException, IOException { From e5acd36e4e3b7f02d01e827bdea84dbbf86c8a46 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 18 Aug 2023 17:15:52 +0530 Subject: [PATCH 27/87] resolving issues . --- .../upsmf/userManagement/controller/UserController.java | 8 ++++---- .../tarento/upsmf/userManagement/handler/UserHandler.java | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 96ab0c0..58b351c 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -51,13 +51,13 @@ public ResponseEntity sendOTP(@RequestParam String phoneNumber, @Request return userHandler.sendOTP(phoneNumber, name, otp); } - @PostMapping(value = "/keycloak/otp", produces = "application/json") - public ResponseEntity generateOTP(@RequestParam String email) throws URISyntaxException { + @PostMapping(value = "/keycloak/otp", consumes = "application/json", produces = "application/json") + public ResponseEntity generateOTP(@RequestBody String email) throws URISyntaxException { return userHandler.generateOTP(email); } - @PostMapping(value = "/keycloak/login", produces = "application/json") - public ResponseEntity login(@RequestParam final JsonNode body ) throws URISyntaxException { + @PostMapping(value = "/keycloak/login", consumes = "application/json", produces = "application/json") + public ResponseEntity login(@RequestBody JsonNode body ) throws URISyntaxException { return userHandler.login(body); } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 98b50af..a556f4c 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -42,6 +42,7 @@ public String createUser(final JsonNode body) throws URISyntaxException, IOExcep logger.info("user created on ed {}",user); user.toString(); } catch (Exception e){ + response = e.getLocalizedMessage(); logger.error("Error Occured",e); } return response; From 2190a3507ce7d771d8eeb80c5941438c211b9f3f Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 18 Aug 2023 17:56:27 +0530 Subject: [PATCH 28/87] fixing login and otp invoking issues --- .../controller/UserController.java | 4 ++-- .../userManagement/handler/UserHandler.java | 4 ++-- .../userManagement/services/UserService.java | 16 ++++++++++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 58b351c..d59b826 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -52,12 +52,12 @@ public ResponseEntity sendOTP(@RequestParam String phoneNumber, @Request } @PostMapping(value = "/keycloak/otp", consumes = "application/json", produces = "application/json") - public ResponseEntity generateOTP(@RequestBody String email) throws URISyntaxException { + public ResponseEntity generateOTP(@RequestBody String email) throws URISyntaxException, IOException { return userHandler.generateOTP(email); } @PostMapping(value = "/keycloak/login", consumes = "application/json", produces = "application/json") - public ResponseEntity login(@RequestBody JsonNode body ) throws URISyntaxException { + public ResponseEntity login(@RequestBody JsonNode body ) throws URISyntaxException, IOException { return userHandler.login(body); } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index a556f4c..b180be8 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -100,13 +100,13 @@ public ResponseEntity sendOTP(String phoneNumber, String name, String o return stringResponseEntity; } - public ResponseEntity generateOTP(String email) throws URISyntaxException { + public ResponseEntity generateOTP(String email) throws URISyntaxException, IOException { logger.info("generating otp to {} ", email); ResponseEntity stringResponseEntity = userService.generateOTP(email); return stringResponseEntity; } - public ResponseEntity login(final JsonNode body) throws URISyntaxException { + public ResponseEntity login(final JsonNode body) throws URISyntaxException, IOException { logger.info("login called with payload {} ", body.toPrettyString()); return userService.login(body); } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 99143cb..8afe23b 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -1,6 +1,7 @@ package com.tarento.upsmf.userManagement.services; import com.fasterxml.jackson.databind.JsonNode; +import com.tarento.upsmf.userManagement.utility.KeycloakTokenRetriever; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.slf4j.Logger; @@ -15,6 +16,7 @@ import org.springframework.web.util.UriComponentsBuilder; import javax.annotation.PostConstruct; +import java.io.IOException; import java.net.*; @Component @@ -26,6 +28,9 @@ public class UserService { @Autowired private Environment env; + @Autowired + private KeycloakTokenRetriever keycloakTokenRetriever; + private static Environment environment; private String BASE_URL; private String KEYCLOAK_BASEURL; @@ -54,10 +59,11 @@ private HttpHeaders getHeader(){ return headers; } - private HttpHeaders getHeaderForKeycloak(){ + private HttpHeaders getHeaderForKeycloak() throws IOException { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - String authToken = env.getProperty("authorizationToken"); + JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); + String authToken = adminToken.get("access_token").asText(); headers.add("Authorization","Bearer " + authToken); logger.info("Getting keycloak headers...{} ", headers); return headers; @@ -143,20 +149,22 @@ public ResponseEntity sendOTP(String phoneNumber, String name, String ot return result; } - public ResponseEntity generateOTP(String email) throws URISyntaxException { + public ResponseEntity generateOTP(String email) throws URISyntaxException, IOException { logger.info("generate OTP for user...{} ", email); RestTemplate restTemplate = new RestTemplate(); URI uri = new URI(KEYCLOAK_BASEURL + "/user/generateOtp"); + logger.info("login user ...{} ", uri.toString()); HttpHeaders headerForKeycloak = getHeaderForKeycloak(); HttpEntity httpEntity = new HttpEntity(email, headerForKeycloak); ResponseEntity result = restTemplate.postForEntity(uri,httpEntity,String.class); return result; } - public ResponseEntity login(final JsonNode body) throws URISyntaxException { + public ResponseEntity login(final JsonNode body) throws URISyntaxException, IOException { logger.info("login user ...{} ", body); RestTemplate restTemplate = new RestTemplate(); URI uri = new URI(KEYCLOAK_BASEURL + "/user/login"); + logger.info("login user ...{} ", uri.toString()); HttpHeaders headerForKeycloak = getHeaderForKeycloak(); HttpEntity httpEntity = new HttpEntity(body, headerForKeycloak); ResponseEntity result = restTemplate.postForEntity(uri,httpEntity,String.class); From 3e210121422f4723e341fcc090a826fb7056cd5e Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 18 Aug 2023 19:08:25 +0530 Subject: [PATCH 29/87] resolving issues for login and generate otp use case --- .../userManagement/services/UserService.java | 6 +- .../SunbirdRCKeycloakTokenRetriever.java | 96 +++++++++++++++++++ src/main/resources/application.properties | 7 +- 3 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 8afe23b..d149ec1 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.tarento.upsmf.userManagement.utility.KeycloakTokenRetriever; +import com.tarento.upsmf.userManagement.utility.SunbirdRCKeycloakTokenRetriever; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.slf4j.Logger; @@ -31,6 +32,9 @@ public class UserService { @Autowired private KeycloakTokenRetriever keycloakTokenRetriever; + @Autowired + private SunbirdRCKeycloakTokenRetriever sunbirdRCKeycloakTokenRetriever; + private static Environment environment; private String BASE_URL; private String KEYCLOAK_BASEURL; @@ -62,7 +66,7 @@ private HttpHeaders getHeader(){ private HttpHeaders getHeaderForKeycloak() throws IOException { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); + JsonNode adminToken = sunbirdRCKeycloakTokenRetriever.getAdminToken(); String authToken = adminToken.get("access_token").asText(); headers.add("Authorization","Bearer " + authToken); logger.info("Getting keycloak headers...{} ", headers); diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java b/src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java new file mode 100644 index 0000000..fced274 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java @@ -0,0 +1,96 @@ +package com.tarento.upsmf.userManagement.utility; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.tarento.upsmf.userManagement.services.UserService; +import org.apache.http.HttpEntity; +import org.apache.http.HttpHeaders; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.nio.charset.StandardCharsets; + +@Component +@PropertySource({ "classpath:application.properties" }) +public class SunbirdRCKeycloakTokenRetriever { + + private static final Logger logger = LoggerFactory.getLogger(SunbirdRCKeycloakTokenRetriever.class); + + @Autowired + private Environment env; + + private static Environment environment; + + private String ADMIN_TOKEN_ENDPOINT; + + private String ADMIN_TOKEN_SECRET; + + private String ADMIN_USERNAME; + private String ADMIN_PASSWORD; + + private String ADMIN_CLIENTID; + + private ObjectMapper mapper = new ObjectMapper(); + + @PostConstruct + public void init(){ + environment = env; + ADMIN_TOKEN_ENDPOINT = getPropertyValue("sunbirdRC.keycloak.adminToken.endPoint"); + ADMIN_TOKEN_SECRET = getPropertyValue("sunbirdRC.keycloak.adminToken.clientSecret"); + ADMIN_USERNAME = getPropertyValue("sunbirdRC.keycloak.adminToken.userName"); + ADMIN_CLIENTID = getPropertyValue("sunbirdRC.keycloak.adminToken.clientID"); + ADMIN_PASSWORD = getPropertyValue("sunbirdRC.keycloak.adminToken.clientSecret"); + } + + public static String getPropertyValue(String property){ + return environment.getProperty(property); + } + public JsonNode getAdminToken() throws IOException { + String tokenEndpoint = ADMIN_TOKEN_ENDPOINT; + logger.info("Token endpoint: {}" ,tokenEndpoint); + HttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(tokenEndpoint); + + List params = new ArrayList<>(); + params.add(new BasicNameValuePair("username", ADMIN_USERNAME)); + params.add(new BasicNameValuePair("grant_type", "client_credentials")); + params.add(new BasicNameValuePair("client_id", ADMIN_CLIENTID)); + params.add(new BasicNameValuePair("client_secret", ADMIN_TOKEN_SECRET)); + + httpPost.setEntity(new UrlEncodedFormEntity(params, StandardCharsets.UTF_8)); + httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded"); + logger.info("headers {}",httpPost); + + org.apache.http.HttpResponse response = httpClient.execute(httpPost); + HttpEntity entity = response.getEntity(); + String responseBody = EntityUtils.toString(entity, StandardCharsets.UTF_8); + + if (response.getStatusLine().getStatusCode() == 200) { + System.out.println("Access token obtained successfully."); + System.out.println("Response: " + responseBody); + } else { + System.out.println("Failed to obtain access token."); + System.out.println("Response: " + responseBody); + } + + logger.info("Response body: {}", responseBody); + JsonNode jsonNode = mapper.readTree(responseBody); + return jsonNode; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index bcdd5c4..65be6f4 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -6,11 +6,16 @@ otp.userName = otp.password = otp.senderID = otp.baseUrl = -keycloak_BaseURL = /api/v1 +keycloak_BaseURL = http://localhost:8001/api/v1 adminToken.endPoint =http://localhost:8080/auth/realms/master/protocol/openid-connect/token adminToken.clientSecret =2fbb157c-24f0-48cb-83d8-bc85eb4fb982 adminToken.userName =admin adminToken.password =Welcome@123 keycloak.user.baseURL =http://localhost:8080/auth/admin/realms/example/users registry.endpoint.save.userinfo =http://localhost:8001/api/v1/keycloak/persist/userCredential +sunbirdRC.keycloak.adminToken.endPoint =http://localhost:8080/auth/realms/sunbird-rc/protocol/openid-connect/token +sunbirdRC.keycloak.adminToken.userName =admin +sunbirdRC.keycloak.adminToken.clientID =admin-api +sunbirdRC.keycloak.adminToken.clientSecret =QF5op6Hb3Y9mY1rU0IycdjmD7j3Bvzkh + From 4223d591700b49c911cf2cc198efc4f37ed611cb Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Sat, 19 Aug 2023 17:58:34 +0530 Subject: [PATCH 30/87] adding logs to response from keyclopak . --- .../upsmf/userManagement/utility/KeycloakUserCreator.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java index bd086f1..d16f157 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java @@ -73,7 +73,9 @@ public String createUser(final JsonNode request) throws IOException { httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); + logger.info("Response from httpClient call : {}", response); String responseBody = EntityUtils.toString(response.getEntity()); + logger.info("Response from keycloak Rest API call : {}", responseBody); if (response.getStatusLine().getStatusCode() == 201) { String password = ((ArrayNode)body.get("credentials")).get(0).get("value").asText(); try { From dd396220d9b77e7c3aad0e93a23e61ac7dff8b21 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 21 Aug 2023 07:55:20 +0530 Subject: [PATCH 31/87] returning the newly created user's id . --- .../tarento/upsmf/userManagement/handler/UserHandler.java | 2 +- .../upsmf/userManagement/utility/KeycloakUserCreator.java | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index b180be8..e18e77a 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -42,7 +42,7 @@ public String createUser(final JsonNode body) throws URISyntaxException, IOExcep logger.info("user created on ed {}",user); user.toString(); } catch (Exception e){ - response = e.getLocalizedMessage(); + //response = e.getLocalizedMessage(); logger.error("Error Occured",e); } return response; diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java index d16f157..31c0fb0 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java @@ -22,6 +22,8 @@ import javax.annotation.PostConstruct; import java.io.IOException; +import java.util.Arrays; +import java.util.Optional; import java.util.UUID; @Component @@ -77,13 +79,15 @@ public String createUser(final JsonNode request) throws IOException { String responseBody = EntityUtils.toString(response.getEntity()); logger.info("Response from keycloak Rest API call : {}", responseBody); if (response.getStatusLine().getStatusCode() == 201) { + String location = response.getFirstHeader("location").getValue(); + location = location.substring(location.lastIndexOf("/")+1); String password = ((ArrayNode)body.get("credentials")).get(0).get("value").asText(); + responseBody = location; try { String strResponse = keycloakUserCredentialPersister.persistUserInfo(userName, password); }catch (Exception ex){ ex.printStackTrace(); } - responseBody = "200"; } logger.info("ResponseBody {}", responseBody); return responseBody; From f9749ef3021ee4cf8a6dae89da2937739ec70b32 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 21 Aug 2023 12:54:04 +0530 Subject: [PATCH 32/87] adding changes to activate and deactivate users . --- .../controller/UserController.java | 4 +-- .../userManagement/handler/UserHandler.java | 26 ++++++++++++------- .../KeycloakUserActivateDeActivate.java | 8 +++--- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index d59b826..5f2a65c 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -37,12 +37,12 @@ public String listUser(@RequestBody final JsonNode body) throws URISyntaxExcepti } @PostMapping(value = "/activate", consumes = "application/json", produces = "application/json") - public ResponseEntity activateUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { + public String activateUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { return userHandler.activateUser(body); } @PostMapping(value = "/deactivate", consumes = "application/json", produces = "application/json") - public ResponseEntity deactivateUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { + public String deactivateUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { return userHandler.deactivateUser(body); } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index e18e77a..73f1dcf 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -75,23 +75,29 @@ public String listUser(final JsonNode body) throws URISyntaxException, IOExcepti return users; } - public ResponseEntity activateUser(final JsonNode body) throws URISyntaxException, IOException { + public String activateUser(final JsonNode body) throws URISyntaxException, IOException { logger.info("activating user with payload {} ", body.toPrettyString()); JsonNode request = body.get("request"); - keycloakUserActivateDeActivate.activateDeactivatUser(request.get("userName").asText(), true); - - ResponseEntity jsonNodeResponseEntity = userService.activateUser(body); - return jsonNodeResponseEntity; + String response = keycloakUserActivateDeActivate.activateDeactivatUser(request.get("userName").asText(), true); + try { + ResponseEntity jsonNodeResponseEntity = userService.activateUser(body); + }catch (Exception exception){ + exception.printStackTrace(); + } + return response; } - public ResponseEntity deactivateUser(final JsonNode body) throws URISyntaxException, IOException { + public String deactivateUser(final JsonNode body) throws URISyntaxException, IOException { logger.info("deactivating user with payload {} ", body.toPrettyString()); JsonNode request = body.get("request"); - keycloakUserActivateDeActivate.activateDeactivatUser(request.get("userName").asText(), false); - - ResponseEntity jsonNodeResponseEntity = userService.deactivateUser(body); - return jsonNodeResponseEntity; + String response = keycloakUserActivateDeActivate.activateDeactivatUser(request.get("userName").asText(), false); + try { + ResponseEntity jsonNodeResponseEntity = userService.deactivateUser(body); + }catch (Exception ex){ + ex.printStackTrace(); + } + return response; } public ResponseEntity sendOTP(String phoneNumber, String name, String otp) throws URISyntaxException { diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java index 9a3037b..2edc46b 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import org.apache.http.HttpHeaders; +import org.apache.http.StatusLine; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.StringEntity; @@ -61,8 +62,9 @@ public String activateDeactivatUser(final String userName, boolean activate) thr httpPut.setEntity(entity); org.apache.http.HttpResponse response = httpClient.execute(httpPut); - String responseBody = EntityUtils.toString(response.getEntity()); - logger.info("Response {}", responseBody); - return requestBody; + StatusLine statusLine = response.getStatusLine(); + + String responseBody = statusLine.getStatusCode() + " " + statusLine.getReasonPhrase(); + return responseBody; } } From c65c7725d38dfeca005f53e6fd2d8750423631a5 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 21 Aug 2023 13:50:18 +0530 Subject: [PATCH 33/87] adding logs while saving user to DB . --- .../upsmf/userManagement/utility/KeycloakUserCreator.java | 1 + .../utility/KeycloakUserCredentialPersister.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java index 31c0fb0..4d5f822 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java @@ -84,6 +84,7 @@ public String createUser(final JsonNode request) throws IOException { String password = ((ArrayNode)body.get("credentials")).get(0).get("value").asText(); responseBody = location; try { + logger.info("syncing user {} with pwd {}",userName,password); String strResponse = keycloakUserCredentialPersister.persistUserInfo(userName, password); }catch (Exception ex){ ex.printStackTrace(); diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java index d492a9d..43b88a1 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java @@ -43,7 +43,7 @@ public static String getPropertyValue(String property){ return environment.getProperty(property); } public String persistUserInfo(final String userName, final String password) throws IOException { - + logger.info("saving user info to endpoint {}",REGISTRYENDPOINTSAVEUSERINFO); HttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(REGISTRYENDPOINTSAVEUSERINFO); httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); @@ -51,9 +51,11 @@ public String persistUserInfo(final String userName, final String password) thro "\"username\": " + "\"" + userName + "\"" + "," + "\"password\": " + "\"" + password + "\"" + "," + "}"; + logger.info("paayload to save user info {}",requestBody); StringEntity entity = new StringEntity(requestBody); httpPost.setEntity(entity); org.apache.http.HttpResponse response = httpClient.execute(httpPost); + logger.info("Response from server {}",response); String responseBody = EntityUtils.toString(response.getEntity()); return responseBody; } From c506ae32491af11ffc7615284f3daf1981795d91 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 21 Aug 2023 14:28:29 +0530 Subject: [PATCH 34/87] resolving data ssync issues . --- .../KeycloakUserCredentialPersister.java | 9 +++++++- .../SunbirdRCKeycloakTokenRetriever.java | 21 +++++++++++-------- src/main/resources/application.properties | 2 +- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java index 43b88a1..3308ce9 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java @@ -1,5 +1,6 @@ package com.tarento.upsmf.userManagement.utility; +import com.fasterxml.jackson.databind.JsonNode; import org.apache.http.HttpHeaders; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; @@ -29,6 +30,9 @@ public class KeycloakUserCredentialPersister { @Autowired private KeycloakUserActivateDeActivate keycloakUserActivateDeActivate; + @Autowired + private SunbirdRCKeycloakTokenRetriever sunbirdRCKeycloakTokenRetriever; + private static Environment environment; private String REGISTRYENDPOINTSAVEUSERINFO; @@ -46,12 +50,15 @@ public String persistUserInfo(final String userName, final String password) thro logger.info("saving user info to endpoint {}",REGISTRYENDPOINTSAVEUSERINFO); HttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(REGISTRYENDPOINTSAVEUSERINFO); + JsonNode adminToken = sunbirdRCKeycloakTokenRetriever.getAdminToken(); + String authToken = adminToken.get("access_token").asText(); httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); + httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + authToken); String requestBody = "{" + "\"username\": " + "\"" + userName + "\"" + "," + "\"password\": " + "\"" + password + "\"" + "," + "}"; - logger.info("paayload to save user info {}",requestBody); + logger.info("payload to save user info with body {} and header {}",requestBody,httpPost.getAllHeaders()); StringEntity entity = new StringEntity(requestBody); httpPost.setEntity(entity); org.apache.http.HttpResponse response = httpClient.execute(httpPost); diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java b/src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java index fced274..6666b89 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java @@ -55,7 +55,7 @@ public void init(){ ADMIN_TOKEN_SECRET = getPropertyValue("sunbirdRC.keycloak.adminToken.clientSecret"); ADMIN_USERNAME = getPropertyValue("sunbirdRC.keycloak.adminToken.userName"); ADMIN_CLIENTID = getPropertyValue("sunbirdRC.keycloak.adminToken.clientID"); - ADMIN_PASSWORD = getPropertyValue("sunbirdRC.keycloak.adminToken.clientSecret"); + ADMIN_PASSWORD = getPropertyValue("sunbirdRC.keycloak.adminToken.password"); } public static String getPropertyValue(String property){ @@ -67,19 +67,22 @@ public JsonNode getAdminToken() throws IOException { HttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(tokenEndpoint); - List params = new ArrayList<>(); - params.add(new BasicNameValuePair("username", ADMIN_USERNAME)); - params.add(new BasicNameValuePair("grant_type", "client_credentials")); - params.add(new BasicNameValuePair("client_id", ADMIN_CLIENTID)); - params.add(new BasicNameValuePair("client_secret", ADMIN_TOKEN_SECRET)); + String requestBody = "username=" + ADMIN_USERNAME + + "&password=" + ADMIN_PASSWORD + + "&grant_type=client_credentials" + + "&client_id=admin-cli" + + "&client_secret=" + ADMIN_TOKEN_SECRET; - httpPost.setEntity(new UrlEncodedFormEntity(params, StandardCharsets.UTF_8)); + logger.info("Request body: {}", requestBody); + StringEntity entity = new StringEntity(requestBody); + + httpPost.setEntity(entity); httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded"); logger.info("headers {}",httpPost); org.apache.http.HttpResponse response = httpClient.execute(httpPost); - HttpEntity entity = response.getEntity(); - String responseBody = EntityUtils.toString(entity, StandardCharsets.UTF_8); + HttpEntity httpEntity = response.getEntity(); + String responseBody = EntityUtils.toString(httpEntity, StandardCharsets.UTF_8); if (response.getStatusLine().getStatusCode() == 200) { System.out.println("Access token obtained successfully."); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 65be6f4..ef6994d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -17,5 +17,5 @@ sunbirdRC.keycloak.adminToken.endPoint =http://localhost:8080/auth/realms/sunbir sunbirdRC.keycloak.adminToken.userName =admin sunbirdRC.keycloak.adminToken.clientID =admin-api sunbirdRC.keycloak.adminToken.clientSecret =QF5op6Hb3Y9mY1rU0IycdjmD7j3Bvzkh - +sunbirdRC.keycloak.adminToken.password =admin From f33e4fc7c044767b49f107bbdd95671da51d9d5b Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 21 Aug 2023 14:38:14 +0530 Subject: [PATCH 35/87] fixing issue with generating auth token . --- .../utility/SunbirdRCKeycloakTokenRetriever.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java b/src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java index 6666b89..3dc2c01 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java @@ -68,9 +68,8 @@ public JsonNode getAdminToken() throws IOException { HttpPost httpPost = new HttpPost(tokenEndpoint); String requestBody = "username=" + ADMIN_USERNAME + - "&password=" + ADMIN_PASSWORD + "&grant_type=client_credentials" + - "&client_id=admin-cli" + + "&client_id=" + ADMIN_CLIENTID + "&client_secret=" + ADMIN_TOKEN_SECRET; logger.info("Request body: {}", requestBody); From 3046025ae5705dda7b43052ea36a9f61570af850 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 21 Aug 2023 14:46:10 +0530 Subject: [PATCH 36/87] resolving json format issues with payload . --- .../userManagement/utility/KeycloakUserCredentialPersister.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java index 3308ce9..4b46240 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java @@ -56,7 +56,7 @@ public String persistUserInfo(final String userName, final String password) thro httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + authToken); String requestBody = "{" + "\"username\": " + "\"" + userName + "\"" + "," + - "\"password\": " + "\"" + password + "\"" + "," + + "\"password\": " + "\"" + password + "\"" + "}"; logger.info("payload to save user info with body {} and header {}",requestBody,httpPost.getAllHeaders()); StringEntity entity = new StringEntity(requestBody); From 719b8311c00e5fede0cb5dbf762387076309e3c5 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 21 Aug 2023 15:02:15 +0530 Subject: [PATCH 37/87] using email instead of user-id while saving info to DB . --- .../upsmf/userManagement/utility/KeycloakUserCreator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java index 4d5f822..c370eb8 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java @@ -85,7 +85,8 @@ public String createUser(final JsonNode request) throws IOException { responseBody = location; try { logger.info("syncing user {} with pwd {}",userName,password); - String strResponse = keycloakUserCredentialPersister.persistUserInfo(userName, password); + String email = body.get("email").asText(); + String strResponse = keycloakUserCredentialPersister.persistUserInfo(email, password); }catch (Exception ex){ ex.printStackTrace(); } From 6f421cbd859263bb04ea854656659f7e7e9f9983 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 21 Aug 2023 17:14:40 +0530 Subject: [PATCH 38/87] payment gateway . --- pom.xml | 12 +++ .../controller/UserController.java | 12 +++ .../upsmf/userManagement/model/Course.java | 38 ++++++++ .../upsmf/userManagement/model/Exam.java | 48 ++++++++++ .../upsmf/userManagement/model/Institute.java | 33 +++++++ .../upsmf/userManagement/model/Payment.java | 33 +++++++ .../userManagement/model/ResponseDto.java | 92 +++++++++++++++++++ .../userManagement/model/ResponseParams.java | 50 ++++++++++ .../services/PaymentService.java | 10 ++ .../services/impl/PaymentServiceImpl.java | 44 +++++++++ .../java/repository/PaymentRepository.java | 15 +++ 11 files changed, 387 insertions(+) create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/Course.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/Exam.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/Institute.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/Payment.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/ResponseDto.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/ResponseParams.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java create mode 100644 src/main/java/repository/PaymentRepository.java diff --git a/pom.xml b/pom.xml index ac4e5f4..82857eb 100644 --- a/pom.xml +++ b/pom.xml @@ -95,6 +95,18 @@ 21.1.2 + + jakarta.persistence + jakarta.persistence-api + 2.2.3 + + + + org.springframework.data + spring-data-jpa + 2.7.14 + + diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 5f2a65c..28c7b21 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -2,6 +2,9 @@ import com.fasterxml.jackson.databind.JsonNode; import com.tarento.upsmf.userManagement.handler.UserHandler; +import com.tarento.upsmf.userManagement.model.Payment; +import com.tarento.upsmf.userManagement.model.ResponseDto; +import com.tarento.upsmf.userManagement.services.PaymentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -13,6 +16,9 @@ @RequestMapping(value = "/api/v1/user") public class UserController { + @Autowired + PaymentService paymentService; + @Autowired private UserHandler userHandler; @@ -61,4 +67,10 @@ public ResponseEntity login(@RequestBody JsonNode body ) throws URISynta return userHandler.login(body); } + @PostMapping(value = "/payment") + public ResponseEntity payment(@RequestBody Payment payment){ + ResponseDto response = paymentService.makePayment(payment); + return new ResponseEntity<>(response, response.getResponseCode()); + } + } diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/Course.java b/src/main/java/com/tarento/upsmf/userManagement/model/Course.java new file mode 100644 index 0000000..aef8d3a --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/model/Course.java @@ -0,0 +1,38 @@ +package com.tarento.upsmf.userManagement.model; + +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import lombok.*; + +import javax.persistence.*; +import java.util.List; + +@Entity +@Table(name = "course") +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +@Builder +public class Course { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String courseCode; + private String courseName; + private String description; + + @ManyToOne + @JoinColumn(name = "institute_id") + @JsonIgnore + private Institute institute; + + @OneToMany(mappedBy = "course") + @JsonIgnore + private List exams; +} \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/Exam.java b/src/main/java/com/tarento/upsmf/userManagement/model/Exam.java new file mode 100644 index 0000000..61caedd --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/model/Exam.java @@ -0,0 +1,48 @@ +package com.tarento.upsmf.userManagement.model; + +import lombok.*; + +import javax.persistence.*; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Entity +@Table(name = "exam") +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +@Builder +public class Exam { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "exam_cycle_id") + private Long examCycleId; // Link to the ExamCycle entity + + @Column(name = "exam_date") + private LocalDate examDate; + + @Column(name = "created_by") + private String createdBy; + + @Column(name = "created_on") + private LocalDateTime createdOn; + + @Column(name = "modified_by") + private String modifiedBy; + + @Column(name = "modified_on") + private LocalDateTime modifiedOn; + + @ManyToOne + @JoinColumn(name = "course_id") + private Course course; + + @Column(name = "obsolete", nullable = false, columnDefinition = "int default 0") + private Integer obsolete = 0; + +} \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/Institute.java b/src/main/java/com/tarento/upsmf/userManagement/model/Institute.java new file mode 100644 index 0000000..a990fb8 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/model/Institute.java @@ -0,0 +1,33 @@ +package com.tarento.upsmf.userManagement.model; + +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import lombok.*; + +import javax.persistence.*; +import java.util.List; + +@Entity +@Table(name = "institute") +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +@Builder +public class Institute { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String instituteName; + private String instituteCode; + private String address; + + @OneToMany(mappedBy = "institute") + @JsonIgnore + private List courses; +} \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java b/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java new file mode 100644 index 0000000..37b8f25 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java @@ -0,0 +1,33 @@ +package com.tarento.upsmf.userManagement.model; + + +import lombok.*; + +import javax.persistence.*; +import javax.persistence.OneToMany.*; +import java.util.List; + + + +@Entity +@Setter +@Getter +@NoArgsConstructor +@AllArgsConstructor +@ToString(includeFieldNames = true) +@Builder +@Table(name = "payment") +public class Payment { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer feeId; + + private String fullName; + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "fee_id") + private List exams; + + private Integer noOfExams; + private Integer feeAmount; +} \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/ResponseDto.java b/src/main/java/com/tarento/upsmf/userManagement/model/ResponseDto.java new file mode 100644 index 0000000..0cf4f4a --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/model/ResponseDto.java @@ -0,0 +1,92 @@ +package com.tarento.upsmf.userManagement.model; + +import java.sql.Timestamp; +import java.util.HashMap; +import java.util.Map; + +import lombok.Getter; +import org.springframework.http.HttpStatus; + + +public class ResponseDto { + + private String id; + private String ver; + @Getter + private String ts; + private ResponseParams params; + private HttpStatus responseCode; + + private transient Map response = new HashMap<>(); + + public ResponseDto() { + this.ver = "v1"; + this.ts = String.valueOf(new Timestamp(System.currentTimeMillis())); + this.params = new ResponseParams(); + } + + public ResponseDto(String id) { + this(); + this.id = id; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getVer() { + return ver; + } + + public void setVer(String ver) { + this.ver = ver; + } + + public void setTs(String ts) { + this.ts = ts; + } + + public ResponseParams getParams() { + return params; + } + + public void setParams(ResponseParams params) { + this.params = params; + } + + public HttpStatus getResponseCode() { + return responseCode; + } + + public void setResponseCode(HttpStatus responseCode) { + this.responseCode = responseCode; + } + + public Map getResult() { + return response; + } + + public void setResult(Map result) { + response = result; + } + + public Object get(String key) { + return response.get(key); + } + + public void put(String key, Object vo) { + response.put(key, vo); + } + + public void putAll(Map map) { + response.putAll(map); + } + + public boolean containsKey(String key) { + return response.containsKey(key); + } +} \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/ResponseParams.java b/src/main/java/com/tarento/upsmf/userManagement/model/ResponseParams.java new file mode 100644 index 0000000..407aedf --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/model/ResponseParams.java @@ -0,0 +1,50 @@ +package com.tarento.upsmf.userManagement.model; + +public class ResponseParams { + private String resmsgid; + private String msgid; + private String err; + private String status; + private String errmsg; + + public String getResmsgid() { + return resmsgid; + } + + public void setResmsgid(String resmsgid) { + this.resmsgid = resmsgid; + } + + public String getMsgid() { + return msgid; + } + + public void setMsgid(String msgid) { + this.msgid = msgid; + } + + public String getErr() { + return err; + } + + public void setErr(String err) { + this.err = err; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + +} \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java new file mode 100644 index 0000000..d5fbbc3 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java @@ -0,0 +1,10 @@ +package com.tarento.upsmf.userManagement.services; + +import com.tarento.upsmf.userManagement.model.Payment; +import com.tarento.upsmf.userManagement.model.ResponseDto; +import org.springframework.stereotype.Service; + +@Service +public interface PaymentService { + public ResponseDto makePayment(Payment payment); +} \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java new file mode 100644 index 0000000..786da75 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -0,0 +1,44 @@ +package com.tarento.upsmf.userManagement.services.impl; + +import com.tarento.upsmf.userManagement.model.Payment; +import com.tarento.upsmf.userManagement.model.ResponseDto; +import com.tarento.upsmf.userManagement.services.PaymentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; +import repository.PaymentRepository; + +@Service +public class PaymentServiceImpl implements PaymentService { + + @Autowired + PaymentRepository paymentRepository; + @Override + public ResponseDto makePayment(Payment payment) { + + ResponseDto response = new ResponseDto("api.payment.make"); + // Calculate noOfExams based on the number of selected options + int noOfExams = payment.getExams().size(); + // Calculate the fee amount based on noOfExams and exam fee amount (replace with actual fee calculation) + int examFeeAmount = 100; // Example exam fee amount + int feeAmount = calculateFee(noOfExams, examFeeAmount); + // Set the calculated values in the FeeManage object + payment.setNoOfExams(noOfExams); + payment.setFeeAmount(feeAmount); + // Save the FeeManage object + try { + Payment result = paymentRepository.save(payment); + response.put("message", "Success"); + response.put("response", "Created."); + response.setResponseCode(HttpStatus.OK); + } catch (Exception e) { + response.put("message", "Error saving fee details"); + response.put("response", "Failed to create a message"); + response.setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR); + } + return response; + } + public Integer calculateFee(Integer noOfExams, Integer examFeeAmount) { + return noOfExams * examFeeAmount; + } +} \ No newline at end of file diff --git a/src/main/java/repository/PaymentRepository.java b/src/main/java/repository/PaymentRepository.java new file mode 100644 index 0000000..dea3008 --- /dev/null +++ b/src/main/java/repository/PaymentRepository.java @@ -0,0 +1,15 @@ +package repository; + +import com.tarento.upsmf.userManagement.model.Payment; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface PaymentRepository extends JpaRepository { + @Query(value = "SELECT * FROM fee_details f LEFT JOIN exam_details e ON f.fee_id = e.fee_id WHERE f.fee_id = :id", nativeQuery = true) + Optional findByIdWithExamsNative(@Param("id") Integer id); +} \ No newline at end of file From 96441cd83640200056ad6025dcead10dbe1d6347 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 21 Aug 2023 17:17:12 +0530 Subject: [PATCH 39/87] adding postgres properties . --- src/main/resources/application.properties | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ef6994d..ec231d3 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -19,3 +19,9 @@ sunbirdRC.keycloak.adminToken.clientID =admin-api sunbirdRC.keycloak.adminToken.clientSecret =QF5op6Hb3Y9mY1rU0IycdjmD7j3Bvzkh sunbirdRC.keycloak.adminToken.password =admin +spring.datasource.url=jdbc:postgresql://localhost:5432/frac_tool +spring.datasource.username=postgres +spring.datasource.password=postgres +spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect +spring.jpa.properties.hibernate.format_sql=true +spring.jpa.show-sql=false \ No newline at end of file From e588ca8243760c992084ec71ddf8e28f7931df1a Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 21 Aug 2023 18:38:58 +0530 Subject: [PATCH 40/87] resolving db issues . --- pom.xml | 12 +++++++ .../UserManagementApplication.java | 4 +++ .../upsmf/userManagement/model/Payment.java | 8 ++--- .../repository/PaymentRepository.java | 2 +- .../services/PaymentService.java | 34 +++++++++++++++++-- .../services/impl/PaymentServiceImpl.java | 10 +++--- src/main/resources/application.properties | 3 +- 7 files changed, 60 insertions(+), 13 deletions(-) rename src/main/java/{ => com/tarento/upsmf/userManagement}/repository/PaymentRepository.java (91%) diff --git a/pom.xml b/pom.xml index 82857eb..d4b209a 100644 --- a/pom.xml +++ b/pom.xml @@ -95,6 +95,13 @@ 21.1.2 + + org.postgresql + postgresql + 42.2.20 + runtime + + jakarta.persistence jakarta.persistence-api @@ -107,6 +114,11 @@ 2.7.14 + + org.springframework.boot + spring-boot-starter-data-jpa + 2.7.14 + diff --git a/src/main/java/com/tarento/upsmf/userManagement/UserManagementApplication.java b/src/main/java/com/tarento/upsmf/userManagement/UserManagementApplication.java index 37eb3f7..344938c 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/UserManagementApplication.java +++ b/src/main/java/com/tarento/upsmf/userManagement/UserManagementApplication.java @@ -1,9 +1,13 @@ package com.tarento.upsmf.userManagement; import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; @SpringBootApplication +@EnableJpaRepositories +@EnableAutoConfiguration public class UserManagementApplication { public static void main(String[] args) { SpringApplication.run(UserManagementApplication.class, args); diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java b/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java index 37b8f25..1b52fc5 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java +++ b/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java @@ -19,14 +19,14 @@ @Table(name = "payment") public class Payment { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @GeneratedValue(strategy = GenerationType.AUTO ) private Integer feeId; private String fullName; - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) - @JoinColumn(name = "fee_id") - private List exams; + //@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + //@JoinColumn(name = "fee_id") + //private List exams; private Integer noOfExams; private Integer feeAmount; diff --git a/src/main/java/repository/PaymentRepository.java b/src/main/java/com/tarento/upsmf/userManagement/repository/PaymentRepository.java similarity index 91% rename from src/main/java/repository/PaymentRepository.java rename to src/main/java/com/tarento/upsmf/userManagement/repository/PaymentRepository.java index dea3008..27bd50f 100644 --- a/src/main/java/repository/PaymentRepository.java +++ b/src/main/java/com/tarento/upsmf/userManagement/repository/PaymentRepository.java @@ -1,4 +1,4 @@ -package repository; +package com.tarento.upsmf.userManagement.repository; import com.tarento.upsmf.userManagement.model.Payment; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java index d5fbbc3..3a2d830 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java @@ -2,9 +2,39 @@ import com.tarento.upsmf.userManagement.model.Payment; import com.tarento.upsmf.userManagement.model.ResponseDto; -import org.springframework.stereotype.Service; -@Service public interface PaymentService { + public ResponseDto makePayment(Payment payment); + + /*@Autowired + PaymentRepository paymentRepository; + + public ResponseDto makePayment(Payment payment){ + ResponseDto response = new ResponseDto("api.payment.make"); + // Calculate noOfExams based on the number of selected options + int noOfExams = payment.getExams().size(); + // Calculate the fee amount based on noOfExams and exam fee amount (replace with actual fee calculation) + int examFeeAmount = 100; // Example exam fee amount + int feeAmount = calculateFee(noOfExams, examFeeAmount); + // Set the calculated values in the FeeManage object + payment.setNoOfExams(noOfExams); + payment.setFeeAmount(feeAmount); + // Save the FeeManage object + try { + Payment result = paymentRepository.save(payment); + response.put("message", "Success"); + response.put("response", "Created."); + response.setResponseCode(HttpStatus.OK); + } catch (Exception e) { + response.put("message", "Error saving fee details"); + response.put("response", "Failed to create a message"); + response.setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR); + } + return response; + } + + public Integer calculateFee(Integer noOfExams, Integer examFeeAmount) { + return noOfExams * examFeeAmount; + }*/ } \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 786da75..3b4575f 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -2,28 +2,28 @@ import com.tarento.upsmf.userManagement.model.Payment; import com.tarento.upsmf.userManagement.model.ResponseDto; +import com.tarento.upsmf.userManagement.repository.PaymentRepository; import com.tarento.upsmf.userManagement.services.PaymentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; -import repository.PaymentRepository; @Service public class PaymentServiceImpl implements PaymentService { @Autowired PaymentRepository paymentRepository; - @Override +// @Override public ResponseDto makePayment(Payment payment) { ResponseDto response = new ResponseDto("api.payment.make"); // Calculate noOfExams based on the number of selected options - int noOfExams = payment.getExams().size(); + //int noOfExams = payment.getExams().size(); // Calculate the fee amount based on noOfExams and exam fee amount (replace with actual fee calculation) int examFeeAmount = 100; // Example exam fee amount - int feeAmount = calculateFee(noOfExams, examFeeAmount); + int feeAmount = calculateFee(10, examFeeAmount); // Set the calculated values in the FeeManage object - payment.setNoOfExams(noOfExams); + payment.setNoOfExams(10); payment.setFeeAmount(feeAmount); // Save the FeeManage object try { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index ec231d3..d7f3f75 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -24,4 +24,5 @@ spring.datasource.username=postgres spring.datasource.password=postgres spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true -spring.jpa.show-sql=false \ No newline at end of file +spring.jpa.show-sql=false +spring.jpa.hibernate.ddl-auto=create \ No newline at end of file From 45f32a0a6e9e5d80ffa513d7358f2a06e39de304 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Tue, 22 Aug 2023 15:35:12 +0530 Subject: [PATCH 41/87] user login and send mail APIs added . --- .../controller/UserController.java | 5 ++ .../userManagement/handler/UserHandler.java | 5 ++ .../userManagement/services/UserService.java | 11 +++ .../utility/KeycloakUserCreator.java | 11 ++- .../KeycloakUserCredentialPersister.java | 69 +++++++++++++++++-- src/main/resources/application.properties | 6 +- 6 files changed, 101 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 28c7b21..28fc806 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -73,4 +73,9 @@ public ResponseEntity payment(@RequestBody Payment payment){ return new ResponseEntity<>(response, response.getResponseCode()); } + @PostMapping(value = "/keycloak/usrlogin") + public String usrlogin(@RequestBody JsonNode body) throws IOException { + return userHandler.usrLogin(body); + } + } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 73f1dcf..cde8db6 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -120,4 +120,9 @@ public ResponseEntity login(final JsonNode body) throws URISyntaxExcepti private String getorDefault(final JsonNode request, final String key, final String defaultValue){ return request.get(key) != null ? request.get(key).asText() : defaultValue; } + + public String usrLogin(JsonNode body) throws IOException { + logger.info("login user with body {}",body); + return userService.usrLogin(body); + } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index d149ec1..d61dc18 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.tarento.upsmf.userManagement.utility.KeycloakTokenRetriever; +import com.tarento.upsmf.userManagement.utility.KeycloakUserCredentialPersister; import com.tarento.upsmf.userManagement.utility.SunbirdRCKeycloakTokenRetriever; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; @@ -35,6 +36,9 @@ public class UserService { @Autowired private SunbirdRCKeycloakTokenRetriever sunbirdRCKeycloakTokenRetriever; + @Autowired + private KeycloakUserCredentialPersister keycloakUserCredentialPersister; + private static Environment environment; private String BASE_URL; private String KEYCLOAK_BASEURL; @@ -174,4 +178,11 @@ public ResponseEntity login(final JsonNode body) throws URISyntaxExcepti ResponseEntity result = restTemplate.postForEntity(uri,httpEntity,String.class); return result; } + + public String usrLogin(JsonNode body) throws IOException { + logger.info("login user with body {}",body); + return keycloakUserCredentialPersister.usrLogin(body); + } + + } diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java index c370eb8..4667c52 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java @@ -1,6 +1,7 @@ package com.tarento.upsmf.userManagement.utility; import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.http.Header; @@ -45,6 +46,8 @@ public class KeycloakUserCreator { private String KEYCLOAK_USER_BASE_URL; + private ObjectMapper mapper = new ObjectMapper(); + @PostConstruct public void init(){ environment = env; @@ -87,8 +90,14 @@ public String createUser(final JsonNode request) throws IOException { logger.info("syncing user {} with pwd {}",userName,password); String email = body.get("email").asText(); String strResponse = keycloakUserCredentialPersister.persistUserInfo(email, password); + JsonNode mailPayLoad = mapper.createObjectNode(); + ((ObjectNode)mailPayLoad).put("firstName",body.get("firstName").asText()); + ((ObjectNode)mailPayLoad).put("lastName",body.get("lastName").asText()); + ((ObjectNode)mailPayLoad).put("email",body.get("email").asText()); + ((ObjectNode)mailPayLoad).put("userId",location); + keycloakUserCredentialPersister.sendUserCreateMail(mailPayLoad); }catch (Exception ex){ - ex.printStackTrace(); + logger.error("error occured {}",ex); } } logger.info("ResponseBody {}", responseBody); diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java index 4b46240..b995451 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java @@ -35,21 +35,30 @@ public class KeycloakUserCredentialPersister { private static Environment environment; - private String REGISTRYENDPOINTSAVEUSERINFO; + private String REGISTRY_ENDPOINT_SAVE_USERINFO; + + private String OTP_MAIL_ENDPOINT; + + private String USER_CREATE_MAIL_ENDPOINT; + + private String USER_LOGIN; @PostConstruct public void init(){ environment = env; - REGISTRYENDPOINTSAVEUSERINFO = getPropertyValue("registry.endpoint.save.userinfo"); + REGISTRY_ENDPOINT_SAVE_USERINFO = getPropertyValue("registry.endpoint.save.userinfo"); + OTP_MAIL_ENDPOINT = getPropertyValue("otp.mail.endpoint"); + USER_CREATE_MAIL_ENDPOINT = getPropertyValue("user.create.mail.endpoint"); + USER_LOGIN = getPropertyValue("user.login"); } public static String getPropertyValue(String property){ return environment.getProperty(property); } public String persistUserInfo(final String userName, final String password) throws IOException { - logger.info("saving user info to endpoint {}",REGISTRYENDPOINTSAVEUSERINFO); + logger.info("saving user info to endpoint {}",REGISTRY_ENDPOINT_SAVE_USERINFO); HttpClient httpClient = HttpClients.createDefault(); - HttpPost httpPost = new HttpPost(REGISTRYENDPOINTSAVEUSERINFO); + HttpPost httpPost = new HttpPost(REGISTRY_ENDPOINT_SAVE_USERINFO); JsonNode adminToken = sunbirdRCKeycloakTokenRetriever.getAdminToken(); String authToken = adminToken.get("access_token").asText(); httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); @@ -66,4 +75,56 @@ public String persistUserInfo(final String userName, final String password) thro String responseBody = EntityUtils.toString(response.getEntity()); return responseBody; } + + public String sendOTPMail(JsonNode body) throws IOException { + logger.info("sending OTP to user email endpoint {} ",OTP_MAIL_ENDPOINT); + HttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(OTP_MAIL_ENDPOINT); + JsonNode adminToken = sunbirdRCKeycloakTokenRetriever.getAdminToken(); + String authToken = adminToken.get("access_token").asText(); + httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); + httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + authToken); + logger.info("payload to send OTP mail to user with body {} and header {}", body, httpPost); + StringEntity entity = new StringEntity(body.toPrettyString()); + httpPost.setEntity(entity); + org.apache.http.HttpResponse response = httpClient.execute(httpPost); + logger.info("Response from server {}",response); + String responseBody = EntityUtils.toString(response.getEntity()); + return responseBody; + } + + public String sendUserCreateMail(JsonNode body) throws IOException { + logger.info("sending user create successful mail to user endpoint {}. ",USER_CREATE_MAIL_ENDPOINT); + HttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(USER_CREATE_MAIL_ENDPOINT); + JsonNode adminToken = sunbirdRCKeycloakTokenRetriever.getAdminToken(); + String authToken = adminToken.get("access_token").asText(); + httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); + httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + authToken); + logger.info("payload to send user create successful mail to user with body {} and header {}", body, httpPost); + StringEntity entity = new StringEntity(body.toPrettyString()); + httpPost.setEntity(entity); + org.apache.http.HttpResponse response = httpClient.execute(httpPost); + logger.info("Response from server {}",response); + String responseBody = EntityUtils.toString(response.getEntity()); + return responseBody; + } + + public String usrLogin(JsonNode body) throws IOException { + logger.info("login user endpoint {}. ",USER_LOGIN); + HttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(USER_LOGIN); + JsonNode adminToken = sunbirdRCKeycloakTokenRetriever.getAdminToken(); + String authToken = adminToken.get("access_token").asText(); + httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/json"); + httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + authToken); + logger.info("payload login user with body {} and header {}", body, httpPost); + StringEntity entity = new StringEntity(body.toPrettyString()); + httpPost.setEntity(entity); + org.apache.http.HttpResponse response = httpClient.execute(httpPost); + logger.info("Response from server {}",response); + String responseBody = EntityUtils.toString(response.getEntity()); + return responseBody; + } + } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d7f3f75..004e643 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -25,4 +25,8 @@ spring.datasource.password=postgres spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true spring.jpa.show-sql=false -spring.jpa.hibernate.ddl-auto=create \ No newline at end of file +spring.jpa.hibernate.ddl-auto=create + +otp.mail.endpoint = /api/v1/keycloak/mail/sendOTP +user.create.mail.endpoint =/api/v1/keycloak/mail/userCreate +user.login =/api/v1/login \ No newline at end of file From 734a26bd115d42842acf351f553bfb4fb582724c Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Tue, 22 Aug 2023 16:14:50 +0530 Subject: [PATCH 42/87] adding send email otp and login APIs --- .../upsmf/userManagement/controller/UserController.java | 5 +++++ .../tarento/upsmf/userManagement/handler/UserHandler.java | 5 +++++ .../tarento/upsmf/userManagement/services/UserService.java | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 28fc806..321fe38 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -78,4 +78,9 @@ public String usrlogin(@RequestBody JsonNode body) throws IOException { return userHandler.usrLogin(body); } + @PostMapping(value = "/keycloak/usrOTP") + public String usrOTP(@RequestBody JsonNode body) throws IOException { + return userHandler.usrOTP(body); + } + } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index cde8db6..1216ee2 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -125,4 +125,9 @@ public String usrLogin(JsonNode body) throws IOException { logger.info("login user with body {}",body); return userService.usrLogin(body); } + + public String usrOTP(JsonNode body) throws IOException { + logger.info("OTP mail to user with body {}",body); + return userService.usrOTP(body); + } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index d61dc18..85d1699 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -184,5 +184,10 @@ public String usrLogin(JsonNode body) throws IOException { return keycloakUserCredentialPersister.usrLogin(body); } + public String usrOTP(JsonNode body) throws IOException { + logger.info("OTP mail to user with body {}",body); + return keycloakUserCredentialPersister.sendOTPMail(body); + } + } From aea96e8401fcbf98aa00fb14a2f00b1dca9a3502 Mon Sep 17 00:00:00 2001 From: Ankit Date: Tue, 22 Aug 2023 16:44:21 +0530 Subject: [PATCH 43/87] payment redirection route --- .../controller/UserController.java | 16 +++++--- .../services/PaymentService.java | 2 +- .../services/impl/PaymentServiceImpl.java | 39 +++++++------------ 3 files changed, 26 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 28c7b21..8898b31 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -7,10 +7,14 @@ import com.tarento.upsmf.userManagement.services.PaymentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import java.io.IOException; +import java.net.URI; import java.net.URISyntaxException; +import java.util.Map; @RestController @RequestMapping(value = "/api/v1/user") @@ -67,10 +71,12 @@ public ResponseEntity login(@RequestBody JsonNode body ) throws URISynta return userHandler.login(body); } - @PostMapping(value = "/payment") - public ResponseEntity payment(@RequestBody Payment payment){ - ResponseDto response = paymentService.makePayment(payment); - return new ResponseEntity<>(response, response.getResponseCode()); + @GetMapping(value = "/payment") + public ResponseEntity paymentRedirect(Payment payment){ + //Print params here + HttpHeaders headers = new HttpHeaders(); + String redirectUrl = paymentService.makePayment(payment); + headers.setLocation(URI.create(redirectUrl)); + return new ResponseEntity(null,headers,HttpStatus.PERMANENT_REDIRECT); } - } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java index 3a2d830..482eea8 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java @@ -5,7 +5,7 @@ public interface PaymentService { - public ResponseDto makePayment(Payment payment); + public String makePayment(Payment payment); /*@Autowired PaymentRepository paymentRepository; diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 3b4575f..63c56ca 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -14,31 +14,20 @@ public class PaymentServiceImpl implements PaymentService { @Autowired PaymentRepository paymentRepository; // @Override - public ResponseDto makePayment(Payment payment) { + public String makePayment(Payment payment) { + //read params + System.out.println(payment); + //check status + + //if valid + + //save transaction details with success + //redirect to success page with success params - transaction id, amount, + //return "https://applicant.upsmfac.org?resp=success&transactionId{}=&amount={}"; + //if invalid +// save transactions details with error + //redirect to error page with error params - transaction id, error code , amount + return "https://applicant.upsmfac.org?resp=fail&transactionId{}=&amount={}"; - ResponseDto response = new ResponseDto("api.payment.make"); - // Calculate noOfExams based on the number of selected options - //int noOfExams = payment.getExams().size(); - // Calculate the fee amount based on noOfExams and exam fee amount (replace with actual fee calculation) - int examFeeAmount = 100; // Example exam fee amount - int feeAmount = calculateFee(10, examFeeAmount); - // Set the calculated values in the FeeManage object - payment.setNoOfExams(10); - payment.setFeeAmount(feeAmount); - // Save the FeeManage object - try { - Payment result = paymentRepository.save(payment); - response.put("message", "Success"); - response.put("response", "Created."); - response.setResponseCode(HttpStatus.OK); - } catch (Exception e) { - response.put("message", "Error saving fee details"); - response.put("response", "Failed to create a message"); - response.setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR); - } - return response; - } - public Integer calculateFee(Integer noOfExams, Integer examFeeAmount) { - return noOfExams * examFeeAmount; } } \ No newline at end of file From 89e269bfc56e7767ff73bc552ba66326ca32f0ff Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Tue, 22 Aug 2023 18:02:56 +0530 Subject: [PATCH 44/87] feature for payment gateway response handler . --- .../controller/UserController.java | 10 +-- .../userManagement/handler/UserHandler.java | 6 ++ .../services/PaymentService.java | 41 ++-------- .../userManagement/services/UserService.java | 9 +++ .../services/impl/PaymentServiceImpl.java | 74 ++++++++++++++----- src/main/resources/application.properties | 1 + 6 files changed, 84 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 8898b31..4f05389 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -71,12 +71,8 @@ public ResponseEntity login(@RequestBody JsonNode body ) throws URISynta return userHandler.login(body); } - @GetMapping(value = "/payment") - public ResponseEntity paymentRedirect(Payment payment){ - //Print params here - HttpHeaders headers = new HttpHeaders(); - String redirectUrl = paymentService.makePayment(payment); - headers.setLocation(URI.create(redirectUrl)); - return new ResponseEntity(null,headers,HttpStatus.PERMANENT_REDIRECT); + @PostMapping(value = "/payment") + public String paymentRedirect(Payment payment) throws URISyntaxException, IOException { + return userHandler.paymentRedirect(payment); } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 73f1dcf..59bec1e 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.tarento.upsmf.userManagement.model.KeyCloakUserDTO; +import com.tarento.upsmf.userManagement.model.Payment; import com.tarento.upsmf.userManagement.services.UserService; import com.tarento.upsmf.userManagement.utility.*; import org.slf4j.Logger; @@ -120,4 +121,9 @@ public ResponseEntity login(final JsonNode body) throws URISyntaxExcepti private String getorDefault(final JsonNode request, final String key, final String defaultValue){ return request.get(key) != null ? request.get(key).asText() : defaultValue; } + + public String paymentRedirect(Payment payment) throws URISyntaxException, IOException { + logger.info("payload from paymentRedirect {}",payment); + return userService.paymentRedirect(payment); + } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java index 482eea8..56b68df 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java @@ -1,40 +1,15 @@ package com.tarento.upsmf.userManagement.services; +import com.fasterxml.jackson.core.JsonProcessingException; import com.tarento.upsmf.userManagement.model.Payment; -import com.tarento.upsmf.userManagement.model.ResponseDto; +import org.springframework.stereotype.Service; -public interface PaymentService { - - public String makePayment(Payment payment); +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URISyntaxException; - /*@Autowired - PaymentRepository paymentRepository; - public ResponseDto makePayment(Payment payment){ - ResponseDto response = new ResponseDto("api.payment.make"); - // Calculate noOfExams based on the number of selected options - int noOfExams = payment.getExams().size(); - // Calculate the fee amount based on noOfExams and exam fee amount (replace with actual fee calculation) - int examFeeAmount = 100; // Example exam fee amount - int feeAmount = calculateFee(noOfExams, examFeeAmount); - // Set the calculated values in the FeeManage object - payment.setNoOfExams(noOfExams); - payment.setFeeAmount(feeAmount); - // Save the FeeManage object - try { - Payment result = paymentRepository.save(payment); - response.put("message", "Success"); - response.put("response", "Created."); - response.setResponseCode(HttpStatus.OK); - } catch (Exception e) { - response.put("message", "Error saving fee details"); - response.put("response", "Failed to create a message"); - response.setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR); - } - return response; - } - - public Integer calculateFee(Integer noOfExams, Integer examFeeAmount) { - return noOfExams * examFeeAmount; - }*/ +@Service +public interface PaymentService { + public String makePayment(Payment payment) throws URISyntaxException, IOException; } \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index d149ec1..0152b04 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -1,6 +1,7 @@ package com.tarento.upsmf.userManagement.services; import com.fasterxml.jackson.databind.JsonNode; +import com.tarento.upsmf.userManagement.model.Payment; import com.tarento.upsmf.userManagement.utility.KeycloakTokenRetriever; import com.tarento.upsmf.userManagement.utility.SunbirdRCKeycloakTokenRetriever; import org.apache.http.client.HttpClient; @@ -35,6 +36,9 @@ public class UserService { @Autowired private SunbirdRCKeycloakTokenRetriever sunbirdRCKeycloakTokenRetriever; + @Autowired + private PaymentService paymentService; + private static Environment environment; private String BASE_URL; private String KEYCLOAK_BASEURL; @@ -174,4 +178,9 @@ public ResponseEntity login(final JsonNode body) throws URISyntaxExcepti ResponseEntity result = restTemplate.postForEntity(uri,httpEntity,String.class); return result; } + + public String paymentRedirect(Payment payment) throws URISyntaxException, IOException { + return paymentService.makePayment(payment); + } + } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 63c56ca..db606fb 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -1,33 +1,73 @@ package com.tarento.upsmf.userManagement.services.impl; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.tarento.upsmf.userManagement.model.Payment; -import com.tarento.upsmf.userManagement.model.ResponseDto; import com.tarento.upsmf.userManagement.repository.PaymentRepository; import com.tarento.upsmf.userManagement.services.PaymentService; +import org.apache.http.HttpHeaders; +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpEntity; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; @Service +@PropertySource({ "classpath:application.properties" }) public class PaymentServiceImpl implements PaymentService { + private static final Logger logger = LoggerFactory.getLogger(PaymentServiceImpl.class); + + @Autowired + private Environment env; + + private static Environment environment; + @Autowired PaymentRepository paymentRepository; -// @Override - public String makePayment(Payment payment) { - //read params - System.out.println(payment); - //check status - - //if valid - - //save transaction details with success - //redirect to success page with success params - transaction id, amount, - //return "https://applicant.upsmfac.org?resp=success&transactionId{}=&amount={}"; - //if invalid -// save transactions details with error - //redirect to error page with error params - transaction id, error code , amount - return "https://applicant.upsmfac.org?resp=fail&transactionId{}=&amount={}"; + private String PAYMENT_GATEWAY_ENDPOINT; + + private ObjectMapper mapper = new ObjectMapper(); + + @PostConstruct + public void init(){ + environment = env; + PAYMENT_GATEWAY_ENDPOINT = getPropertyValue("paymentGatewayEndPoint"); + } + + public static String getPropertyValue(String property){ + return environment.getProperty(property); + } + + @Override + public String makePayment(Payment payment) throws URISyntaxException, IOException { + logger.info("payment details...{} ", payment); + HttpClient httpClient = HttpClients.createDefault(); + HttpPost httpPost = new HttpPost(PAYMENT_GATEWAY_ENDPOINT); + String strPaymentURL = mapper.writeValueAsString(payment); + StringEntity entity = new StringEntity(strPaymentURL); + httpPost.setEntity(entity); + HttpResponse response = httpClient.execute(httpPost); + logger.info("Response from httpClient call : {}", response); + String responseBody = EntityUtils.toString(response.getEntity()); + logger.info("Response from keycloak Rest API call : {}", responseBody); + return responseBody; } } \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d7f3f75..afcd8b8 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -18,6 +18,7 @@ sunbirdRC.keycloak.adminToken.userName =admin sunbirdRC.keycloak.adminToken.clientID =admin-api sunbirdRC.keycloak.adminToken.clientSecret =QF5op6Hb3Y9mY1rU0IycdjmD7j3Bvzkh sunbirdRC.keycloak.adminToken.password =admin +paymentGatewayEndPoint =https://applicant.upsmfac.org?resp=fail&transactionId spring.datasource.url=jdbc:postgresql://localhost:5432/frac_tool spring.datasource.username=postgres From 9c205573d5f392f6ca1069c8896da2b4e1ac7304 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Tue, 22 Aug 2023 19:39:31 +0530 Subject: [PATCH 45/87] adding payment respone feature . --- .../controller/UserController.java | 13 +++----- .../userManagement/handler/UserHandler.java | 6 ++-- .../upsmf/userManagement/model/Payment.java | 12 ++------ .../services/PaymentService.java | 5 ++-- .../userManagement/services/UserService.java | 2 +- .../services/impl/PaymentServiceImpl.java | 30 ++++++------------- src/main/resources/application.properties | 2 +- 7 files changed, 23 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 4f05389..07bcfc4 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -2,19 +2,13 @@ import com.fasterxml.jackson.databind.JsonNode; import com.tarento.upsmf.userManagement.handler.UserHandler; -import com.tarento.upsmf.userManagement.model.Payment; -import com.tarento.upsmf.userManagement.model.ResponseDto; import com.tarento.upsmf.userManagement.services.PaymentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import java.io.IOException; -import java.net.URI; import java.net.URISyntaxException; -import java.util.Map; @RestController @RequestMapping(value = "/api/v1/user") @@ -71,8 +65,9 @@ public ResponseEntity login(@RequestBody JsonNode body ) throws URISynta return userHandler.login(body); } - @PostMapping(value = "/payment") - public String paymentRedirect(Payment payment) throws URISyntaxException, IOException { - return userHandler.paymentRedirect(payment); + @GetMapping(value = "/payment") + public ResponseEntity paymentRedirect(@RequestParam("feeId") String feeId, @RequestParam("fullName") String fullName, @RequestParam("noOfExams") String noOfExams, + @RequestParam("feeAmount") String feeAmount) throws URISyntaxException, IOException { + return userHandler.paymentRedirect(feeId, fullName, noOfExams, feeAmount); } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 59bec1e..ddf3e7d 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -1,7 +1,6 @@ package com.tarento.upsmf.userManagement.handler; import com.fasterxml.jackson.databind.JsonNode; -import com.tarento.upsmf.userManagement.model.KeyCloakUserDTO; import com.tarento.upsmf.userManagement.model.Payment; import com.tarento.upsmf.userManagement.services.UserService; import com.tarento.upsmf.userManagement.utility.*; @@ -13,7 +12,6 @@ import java.io.IOException; import java.net.URISyntaxException; -import java.util.UUID; @Component public class UserHandler { @@ -122,7 +120,9 @@ private String getorDefault(final JsonNode request, final String key, final Stri return request.get(key) != null ? request.get(key).asText() : defaultValue; } - public String paymentRedirect(Payment payment) throws URISyntaxException, IOException { + public ResponseEntity paymentRedirect(String feeId, String fullName, String noOfExams, String feeAmount) + throws URISyntaxException, IOException { + Payment payment = Payment.builder().feeId(feeId).fullName(fullName).noOfExams(noOfExams).feeAmount(feeAmount).build(); logger.info("payload from paymentRedirect {}",payment); return userService.paymentRedirect(payment); } diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java b/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java index 1b52fc5..9cf4869 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java +++ b/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java @@ -20,14 +20,8 @@ public class Payment { @Id @GeneratedValue(strategy = GenerationType.AUTO ) - private Integer feeId; - + private String feeId; private String fullName; - - //@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) - //@JoinColumn(name = "fee_id") - //private List exams; - - private Integer noOfExams; - private Integer feeAmount; + private String noOfExams; + private String feeAmount; } \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java index 56b68df..cba56d2 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java @@ -1,15 +1,14 @@ package com.tarento.upsmf.userManagement.services; -import com.fasterxml.jackson.core.JsonProcessingException; import com.tarento.upsmf.userManagement.model.Payment; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import java.io.IOException; -import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; @Service public interface PaymentService { - public String makePayment(Payment payment) throws URISyntaxException, IOException; + public ResponseEntity makePayment(Payment payment) throws URISyntaxException, IOException; } \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 0152b04..3a4837b 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -179,7 +179,7 @@ public ResponseEntity login(final JsonNode body) throws URISyntaxExcepti return result; } - public String paymentRedirect(Payment payment) throws URISyntaxException, IOException { + public ResponseEntity paymentRedirect(Payment payment) throws URISyntaxException, IOException { return paymentService.makePayment(payment); } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index db606fb..03cb8bc 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -1,15 +1,11 @@ package com.tarento.upsmf.userManagement.services.impl; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.tarento.upsmf.userManagement.model.Payment; import com.tarento.upsmf.userManagement.repository.PaymentRepository; import com.tarento.upsmf.userManagement.services.PaymentService; -import org.apache.http.HttpHeaders; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.StringEntity; +import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; @@ -17,14 +13,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; -import org.springframework.http.HttpEntity; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; import javax.annotation.PostConstruct; import java.io.IOException; -import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; @@ -44,8 +38,6 @@ public class PaymentServiceImpl implements PaymentService { private String PAYMENT_GATEWAY_ENDPOINT; - private ObjectMapper mapper = new ObjectMapper(); - @PostConstruct public void init(){ environment = env; @@ -57,17 +49,13 @@ public static String getPropertyValue(String property){ } @Override - public String makePayment(Payment payment) throws URISyntaxException, IOException { + public ResponseEntity makePayment(Payment payment) throws URISyntaxException, IOException { logger.info("payment details...{} ", payment); - HttpClient httpClient = HttpClients.createDefault(); - HttpPost httpPost = new HttpPost(PAYMENT_GATEWAY_ENDPOINT); - String strPaymentURL = mapper.writeValueAsString(payment); - StringEntity entity = new StringEntity(strPaymentURL); - httpPost.setEntity(entity); - HttpResponse response = httpClient.execute(httpPost); - logger.info("Response from httpClient call : {}", response); - String responseBody = EntityUtils.toString(response.getEntity()); - logger.info("Response from keycloak Rest API call : {}", responseBody); - return responseBody; + /** + * save these attributes to DB + */ + org.springframework.http.HttpHeaders httpHeaders = new org.springframework.http.HttpHeaders(); + httpHeaders.setLocation(URI.create(PAYMENT_GATEWAY_ENDPOINT+ "?resp=success")); + return new ResponseEntity(null,httpHeaders, HttpStatus.FOUND); } } \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index afcd8b8..09a3c20 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -18,7 +18,7 @@ sunbirdRC.keycloak.adminToken.userName =admin sunbirdRC.keycloak.adminToken.clientID =admin-api sunbirdRC.keycloak.adminToken.clientSecret =QF5op6Hb3Y9mY1rU0IycdjmD7j3Bvzkh sunbirdRC.keycloak.adminToken.password =admin -paymentGatewayEndPoint =https://applicant.upsmfac.org?resp=fail&transactionId +paymentGatewayEndPoint =https://applicant.upsmfac.org spring.datasource.url=jdbc:postgresql://localhost:5432/frac_tool spring.datasource.username=postgres From 842ddfa5a8e8dd74db8439e0c517c288cfd80b2f Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Tue, 22 Aug 2023 19:56:53 +0530 Subject: [PATCH 46/87] resolving compilation issues . --- .../com/tarento/upsmf/userManagement/handler/UserHandler.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 89cdb6a..129e266 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -123,8 +123,9 @@ private String getorDefault(final JsonNode request, final String key, final Stri public ResponseEntity paymentRedirect(String feeId, String fullName, String noOfExams, String feeAmount) throws URISyntaxException, IOException { Payment payment = Payment.builder().feeId(feeId).fullName(fullName).noOfExams(noOfExams).feeAmount(feeAmount).build(); - logger.info("payload from paymentRedirect {}",payment); + logger.info("payload from paymentRedirect {}", payment); return userService.paymentRedirect(payment); + } public String usrLogin(JsonNode body) throws IOException { logger.info("login user with body {}",body); From 546e7e17e741e133b330dc6d29860b99594ebec3 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Tue, 22 Aug 2023 20:15:01 +0530 Subject: [PATCH 47/87] converting get to post . --- .../upsmf/userManagement/controller/UserController.java | 7 +++---- .../tarento/upsmf/userManagement/handler/UserHandler.java | 7 +++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index b75bec5..fff901b 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -65,10 +65,9 @@ public ResponseEntity login(@RequestBody JsonNode body ) throws URISynta return userHandler.login(body); } - @GetMapping(value = "/payment") - public ResponseEntity paymentRedirect(@RequestParam("feeId") String feeId, @RequestParam("fullName") String fullName, @RequestParam("noOfExams") String noOfExams, - @RequestParam("feeAmount") String feeAmount) throws URISyntaxException, IOException { - return userHandler.paymentRedirect(feeId, fullName, noOfExams, feeAmount); + @PostMapping(value = "/payment") + public ResponseEntity paymentRedirect(@RequestBody JsonNode body) throws URISyntaxException, IOException { + return userHandler.paymentRedirect(body); } @PostMapping(value = "/keycloak/usrlogin") diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 129e266..b8f3133 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -120,9 +120,12 @@ private String getorDefault(final JsonNode request, final String key, final Stri return request.get(key) != null ? request.get(key).asText() : defaultValue; } - public ResponseEntity paymentRedirect(String feeId, String fullName, String noOfExams, String feeAmount) + public ResponseEntity paymentRedirect(JsonNode body) throws URISyntaxException, IOException { - Payment payment = Payment.builder().feeId(feeId).fullName(fullName).noOfExams(noOfExams).feeAmount(feeAmount).build(); + Payment payment = Payment.builder().feeId(body.get("feeId").asText()) + .fullName(body.get("fullName").asText()) + .noOfExams(body.get("noOfExams").asText()) + .feeAmount(body.get("feeAmount").asText()).build(); logger.info("payload from paymentRedirect {}", payment); return userService.paymentRedirect(payment); } From 67b5c8725178b4db9c9e4d53a0d57c99eccc376d Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Wed, 23 Aug 2023 11:27:14 +0530 Subject: [PATCH 48/87] updating payment response . --- .../controller/UserController.java | 5 +- .../userManagement/handler/UserHandler.java | 11 ++- .../services/PaymentService.java | 3 +- .../userManagement/services/UserService.java | 5 +- .../services/impl/PaymentServiceImpl.java | 70 +++++++++++++++++-- src/main/resources/application.properties | 3 +- 6 files changed, 78 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index fff901b..88d48d0 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.net.URISyntaxException; +import java.util.Map; @RestController @RequestMapping(value = "/api/v1/user") @@ -66,8 +67,8 @@ public ResponseEntity login(@RequestBody JsonNode body ) throws URISynta } @PostMapping(value = "/payment") - public ResponseEntity paymentRedirect(@RequestBody JsonNode body) throws URISyntaxException, IOException { - return userHandler.paymentRedirect(body); + public ResponseEntity paymentRedirect(@RequestBody Map requestData) throws URISyntaxException, IOException { + return userHandler.paymentRedirect(requestData); } @PostMapping(value = "/keycloak/usrlogin") diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index b8f3133..7b7557e 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -12,6 +12,7 @@ import java.io.IOException; import java.net.URISyntaxException; +import java.util.Map; @Component public class UserHandler { @@ -120,14 +121,10 @@ private String getorDefault(final JsonNode request, final String key, final Stri return request.get(key) != null ? request.get(key).asText() : defaultValue; } - public ResponseEntity paymentRedirect(JsonNode body) + public ResponseEntity paymentRedirect(Map requestData) throws URISyntaxException, IOException { - Payment payment = Payment.builder().feeId(body.get("feeId").asText()) - .fullName(body.get("fullName").asText()) - .noOfExams(body.get("noOfExams").asText()) - .feeAmount(body.get("feeAmount").asText()).build(); - logger.info("payload from paymentRedirect {}", payment); - return userService.paymentRedirect(payment); + logger.info("payload from paymentRedirect {}", requestData); + return userService.paymentRedirect(requestData); } public String usrLogin(JsonNode body) throws IOException { diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java index cba56d2..e068821 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java @@ -6,9 +6,10 @@ import java.io.IOException; import java.net.URISyntaxException; +import java.util.Map; @Service public interface PaymentService { - public ResponseEntity makePayment(Payment payment) throws URISyntaxException, IOException; + public ResponseEntity makePayment(Map requestData) throws URISyntaxException, IOException; } \ No newline at end of file diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 38241c4..9d94baf 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -21,6 +21,7 @@ import javax.annotation.PostConstruct; import java.io.IOException; import java.net.*; +import java.util.Map; @Component @PropertySource({ "classpath:application.properties" }) @@ -182,8 +183,8 @@ public ResponseEntity login(final JsonNode body) throws URISyntaxExcepti return result; } - public ResponseEntity paymentRedirect(Payment payment) throws URISyntaxException, IOException { - return paymentService.makePayment(payment); + public ResponseEntity paymentRedirect(Map requestData) throws URISyntaxException, IOException { + return paymentService.makePayment(requestData); } public String usrLogin(JsonNode body) throws IOException { diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 03cb8bc..8ab6c47 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -21,6 +21,9 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Map; @Service @PropertySource({ "classpath:application.properties" }) @@ -38,10 +41,13 @@ public class PaymentServiceImpl implements PaymentService { private String PAYMENT_GATEWAY_ENDPOINT; + private String AES_KEY_FOR_PAYMENT_SUCCESS; + @PostConstruct public void init(){ environment = env; PAYMENT_GATEWAY_ENDPOINT = getPropertyValue("paymentGatewayEndPoint"); + AES_KEY_FOR_PAYMENT_SUCCESS = getPropertyValue("aes_key_for_payment_success"); } public static String getPropertyValue(String property){ @@ -49,13 +55,65 @@ public static String getPropertyValue(String property){ } @Override - public ResponseEntity makePayment(Payment payment) throws URISyntaxException, IOException { - logger.info("payment details...{} ", payment); - /** - * save these attributes to DB - */ + public ResponseEntity makePayment(Map requestData) { + logger.info("payment details...{} ", requestData); org.springframework.http.HttpHeaders httpHeaders = new org.springframework.http.HttpHeaders(); - httpHeaders.setLocation(URI.create(PAYMENT_GATEWAY_ENDPOINT+ "?resp=success")); + String responseString = ""; + if( (requestData != null ) && (requestData.get("Response_Code")!= null) + && requestData.get("Response_Code").equals("E000")) { + responseString = PAYMENT_GATEWAY_ENDPOINT+ "?resp=success"; + logger.info("Payment is successful."); + } else { + responseString = PAYMENT_GATEWAY_ENDPOINT+ "?resp=failure"; + logger.info("Payment failed."); + } + httpHeaders.setLocation(URI.create(responseString)); return new ResponseEntity(null,httpHeaders, HttpStatus.FOUND); + /*if( (requestData != null) && + (requestData.get("Total_Amount") != null ) && + (requestData.containsKey("Total_Amount") && + (requestData.get("Response_Code")!= null) && + requestData.get("Response_Code").equals("E000"))) { + + + // Process payment success logic + String verificationKey = requestData.get("ID") + "|" + + requestData.get("Response_Code") + "|" + + requestData.get("Unique_Ref_Number") + "|" + + requestData.get("Service_Tax_Amount") + "|" + + requestData.get("Processing_Fee_Amount") + "|" + + requestData.get("Total_Amount") + "|" + + requestData.get("Transaction_Amount") + "|" + + requestData.get("Transaction_Date") + "|" + + requestData.get("Interchange_Value") + "|" + + requestData.get("TDR") + "|" + + requestData.get("Payment_Mode") + "|" + + requestData.get("SubMerchantId") + "|" + + requestData.get("ReferenceNo") + "|" + + requestData.get("TPS") + "|" + + AES_KEY_FOR_PAYMENT_SUCCESS; +// String encryptedMessage = sha512Hash(verificationKey); + + // save these attributes to DB + httpHeaders.setLocation(URI.create(PAYMENT_GATEWAY_ENDPOINT+ "?resp=success")); + } else { + httpHeaders.setLocation(URI.create(PAYMENT_GATEWAY_ENDPOINT+ "?resp=failure"));*/ + } + + private String sha512Hash(String input) { + try { + MessageDigest digest = MessageDigest.getInstance("SHA-512"); + byte[] hashBytes = digest.digest(input.getBytes()); + StringBuilder hexString = new StringBuilder(); + for (byte hashByte : hashBytes) { + String hex = Integer.toHexString(0xff & hashByte); + if (hex.length() == 1) hexString.append('0'); + hexString.append(hex); + } + return hexString.toString(); + } catch (NoSuchAlgorithmException e) { + logger.error("Error occurred while encrypting",e); + return null; + } } } \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 9a13d69..94ef32b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -30,4 +30,5 @@ spring.jpa.hibernate.ddl-auto=create otp.mail.endpoint = /api/v1/keycloak/mail/sendOTP user.create.mail.endpoint =/api/v1/keycloak/mail/userCreate -user.login =/api/v1/login \ No newline at end of file +user.login =/api/v1/login +aes_key_for_payment_success =XXXXXXXXXXXXXXXXX \ No newline at end of file From 1166b1f920490d4887d207e9b9517f910631d766 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Wed, 23 Aug 2023 16:53:19 +0530 Subject: [PATCH 49/87] fixing null pointer issue . --- .../com/tarento/upsmf/userManagement/services/UserService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 9d94baf..99314c1 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -41,6 +41,7 @@ public class UserService { @Autowired private PaymentService paymentService; + @Autowired private KeycloakUserCredentialPersister keycloakUserCredentialPersister; private static Environment environment; From 0f82c8760b34d663da4e4154f49776f9a7e252d1 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Wed, 23 Aug 2023 17:04:25 +0530 Subject: [PATCH 50/87] changing the header for request . --- .../upsmf/userManagement/controller/UserController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 88d48d0..488fc67 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -4,6 +4,7 @@ import com.tarento.upsmf.userManagement.handler.UserHandler; import com.tarento.upsmf.userManagement.services.PaymentService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -66,7 +67,7 @@ public ResponseEntity login(@RequestBody JsonNode body ) throws URISynta return userHandler.login(body); } - @PostMapping(value = "/payment") + @PostMapping(value = "/payment", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) public ResponseEntity paymentRedirect(@RequestBody Map requestData) throws URISyntaxException, IOException { return userHandler.paymentRedirect(requestData); } From 2e27cee59780cd85471f1b888216d632c1065edc Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Wed, 23 Aug 2023 17:35:42 +0530 Subject: [PATCH 51/87] changing the header type . --- .../upsmf/userManagement/controller/UserController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 488fc67..aef379d 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -67,8 +67,8 @@ public ResponseEntity login(@RequestBody JsonNode body ) throws URISynta return userHandler.login(body); } - @PostMapping(value = "/payment", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) - public ResponseEntity paymentRedirect(@RequestBody Map requestData) throws URISyntaxException, IOException { + @PostMapping(value = "/payment", consumes = {"*/*"}) + public ResponseEntity paymentRedirect(@RequestParam Map requestData) throws URISyntaxException, IOException { return userHandler.paymentRedirect(requestData); } From ae129af21b13387bb4cc65b7bbd83c78ddb26c42 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Wed, 23 Aug 2023 17:47:32 +0530 Subject: [PATCH 52/87] adding url to properties and changing the condition of payment success . --- .../userManagement/services/impl/PaymentServiceImpl.java | 4 ++-- src/main/resources/application.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 8ab6c47..f4e70d7 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -59,8 +59,8 @@ public ResponseEntity makePayment(Map requestData) { logger.info("payment details...{} ", requestData); org.springframework.http.HttpHeaders httpHeaders = new org.springframework.http.HttpHeaders(); String responseString = ""; - if( (requestData != null ) && (requestData.get("Response_Code")!= null) - && requestData.get("Response_Code").equals("E000")) { + if( (requestData != null ) && (requestData.get("Response Code")!= null) + && requestData.get("Response Code").equals("E000")) { responseString = PAYMENT_GATEWAY_ENDPOINT+ "?resp=success"; logger.info("Payment is successful."); } else { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 94ef32b..543c3ea 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -18,7 +18,7 @@ sunbirdRC.keycloak.adminToken.userName =admin sunbirdRC.keycloak.adminToken.clientID =admin-api sunbirdRC.keycloak.adminToken.clientSecret =QF5op6Hb3Y9mY1rU0IycdjmD7j3Bvzkh sunbirdRC.keycloak.adminToken.password =admin -paymentGatewayEndPoint =https://applicant.upsmfac.org +paymentGatewayEndPoint =https://applicant.upsmfac.org/payment-response spring.datasource.url=jdbc:postgresql://localhost:5432/frac_tool spring.datasource.username=postgres From 07ec6fc15bd6484f56a28a1c1ea609f8dfe8f979 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 28 Aug 2023 13:24:50 +0530 Subject: [PATCH 53/87] adding capability to identify which module made a payment . --- .../services/impl/PaymentServiceImpl.java | 72 ++++++++----------- src/main/resources/application.properties | 3 +- 2 files changed, 33 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index f4e70d7..15b42d9 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -23,7 +23,10 @@ import java.net.URISyntaxException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.regex.Pattern; @Service @PropertySource({ "classpath:application.properties" }) @@ -39,14 +42,16 @@ public class PaymentServiceImpl implements PaymentService { @Autowired PaymentRepository paymentRepository; - private String PAYMENT_GATEWAY_ENDPOINT; + private String REGISTRATION_PAYMENT_GATEWAY_ENDPOINT; + private String AFFILIATION_PAYMENT_GATEWAY_ENDPOINT; private String AES_KEY_FOR_PAYMENT_SUCCESS; @PostConstruct public void init(){ environment = env; - PAYMENT_GATEWAY_ENDPOINT = getPropertyValue("paymentGatewayEndPoint"); + REGISTRATION_PAYMENT_GATEWAY_ENDPOINT = getPropertyValue("registration_payment_Gateway_EndPoint"); + AFFILIATION_PAYMENT_GATEWAY_ENDPOINT = getPropertyValue("affiliation_payment_Gateway_EndPoint"); AES_KEY_FOR_PAYMENT_SUCCESS = getPropertyValue("aes_key_for_payment_success"); } @@ -58,46 +63,31 @@ public static String getPropertyValue(String property){ public ResponseEntity makePayment(Map requestData) { logger.info("payment details...{} ", requestData); org.springframework.http.HttpHeaders httpHeaders = new org.springframework.http.HttpHeaders(); - String responseString = ""; - if( (requestData != null ) && (requestData.get("Response Code")!= null) - && requestData.get("Response Code").equals("E000")) { - responseString = PAYMENT_GATEWAY_ENDPOINT+ "?resp=success"; - logger.info("Payment is successful."); - } else { - responseString = PAYMENT_GATEWAY_ENDPOINT+ "?resp=failure"; - logger.info("Payment failed."); - } - httpHeaders.setLocation(URI.create(responseString)); - return new ResponseEntity(null,httpHeaders, HttpStatus.FOUND); - /*if( (requestData != null) && - (requestData.get("Total_Amount") != null ) && - (requestData.containsKey("Total_Amount") && - (requestData.get("Response_Code")!= null) && - requestData.get("Response_Code").equals("E000"))) { - - - // Process payment success logic - String verificationKey = requestData.get("ID") + "|" + - requestData.get("Response_Code") + "|" + - requestData.get("Unique_Ref_Number") + "|" + - requestData.get("Service_Tax_Amount") + "|" + - requestData.get("Processing_Fee_Amount") + "|" + - requestData.get("Total_Amount") + "|" + - requestData.get("Transaction_Amount") + "|" + - requestData.get("Transaction_Date") + "|" + - requestData.get("Interchange_Value") + "|" + - requestData.get("TDR") + "|" + - requestData.get("Payment_Mode") + "|" + - requestData.get("SubMerchantId") + "|" + - requestData.get("ReferenceNo") + "|" + - requestData.get("TPS") + "|" + - AES_KEY_FOR_PAYMENT_SUCCESS; -// String encryptedMessage = sha512Hash(verificationKey); - - // save these attributes to DB - httpHeaders.setLocation(URI.create(PAYMENT_GATEWAY_ENDPOINT+ "?resp=success")); + String mandatoryFields = requestData.get("mandatoryFields"); + logger.info("mandatoryFields details...{} ", mandatoryFields); + if(mandatoryFields != null && !mandatoryFields.isEmpty()) { + String[] split = mandatoryFields.split(Pattern.quote("|")); + List strings = Arrays.asList(split); + String strEndPoint = ""; + if (strings.contains("registration")) { + strEndPoint = REGISTRATION_PAYMENT_GATEWAY_ENDPOINT; + } else if (strings.contains("registration")) { + strEndPoint = AFFILIATION_PAYMENT_GATEWAY_ENDPOINT; + } + String responseString = ""; + if ((requestData != null) && (requestData.get("Response Code") != null) + && requestData.get("Response Code").equals("E000")) { + responseString = strEndPoint + "?resp=success"; + logger.info("Payment is successful."); } else { - httpHeaders.setLocation(URI.create(PAYMENT_GATEWAY_ENDPOINT+ "?resp=failure"));*/ + responseString = strEndPoint + "?resp=failure"; + logger.info("Payment failed."); + } + logger.info("responseString details...{} ", responseString); + httpHeaders.setLocation(URI.create(responseString)); + return new ResponseEntity(null, httpHeaders, HttpStatus.FOUND); + } + return new ResponseEntity(null, httpHeaders, HttpStatus.NOT_FOUND); } private String sha512Hash(String input) { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 543c3ea..a31f09e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -18,7 +18,8 @@ sunbirdRC.keycloak.adminToken.userName =admin sunbirdRC.keycloak.adminToken.clientID =admin-api sunbirdRC.keycloak.adminToken.clientSecret =QF5op6Hb3Y9mY1rU0IycdjmD7j3Bvzkh sunbirdRC.keycloak.adminToken.password =admin -paymentGatewayEndPoint =https://applicant.upsmfac.org/payment-response +registration_payment_Gateway_EndPoint =https://registration.uphrh.in/payment-response +affiliation_payment_Gateway_EndPoint =https://applicant.upsmfac.org/payment-response spring.datasource.url=jdbc:postgresql://localhost:5432/frac_tool spring.datasource.username=postgres From cf93518b848f3fcd551b28d2bd8d8ca256e6d720 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 28 Aug 2023 13:32:28 +0530 Subject: [PATCH 54/87] correcting manadatory fields label --- .../userManagement/services/impl/PaymentServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 15b42d9..9b2b59f 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -63,8 +63,8 @@ public static String getPropertyValue(String property){ public ResponseEntity makePayment(Map requestData) { logger.info("payment details...{} ", requestData); org.springframework.http.HttpHeaders httpHeaders = new org.springframework.http.HttpHeaders(); - String mandatoryFields = requestData.get("mandatoryFields"); - logger.info("mandatoryFields details...{} ", mandatoryFields); + String mandatoryFields = requestData.get("mandatory fields"); + logger.info("mandatory fields details...{} ", mandatoryFields); if(mandatoryFields != null && !mandatoryFields.isEmpty()) { String[] split = mandatoryFields.split(Pattern.quote("|")); List strings = Arrays.asList(split); From 7de7dd9935f53fcbc5f810456908f6ff33c02f4b Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 28 Aug 2023 14:52:39 +0530 Subject: [PATCH 55/87] adding affiliation . --- .../userManagement/services/impl/PaymentServiceImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 9b2b59f..a45d3f0 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -71,7 +71,7 @@ public ResponseEntity makePayment(Map requestData) { String strEndPoint = ""; if (strings.contains("registration")) { strEndPoint = REGISTRATION_PAYMENT_GATEWAY_ENDPOINT; - } else if (strings.contains("registration")) { + } else if (strings.contains("affiliation")) { strEndPoint = AFFILIATION_PAYMENT_GATEWAY_ENDPOINT; } String responseString = ""; @@ -83,6 +83,9 @@ public ResponseEntity makePayment(Map requestData) { responseString = strEndPoint + "?resp=failure"; logger.info("Payment failed."); } + /** + * save to postgresDB + */ logger.info("responseString details...{} ", responseString); httpHeaders.setLocation(URI.create(responseString)); return new ResponseEntity(null, httpHeaders, HttpStatus.FOUND); From bbe5e24eae0277a2c35e68d7ec16f4c9e8df3ea4 Mon Sep 17 00:00:00 2001 From: Radheshhathwar Date: Mon, 28 Aug 2023 16:51:29 +0530 Subject: [PATCH 56/87] Added transaction entity and save feature --- .../userManagement/model/Transaction.java | 45 ++++++++++++++++ .../repository/TransactionRepository.java | 7 +++ .../services/impl/PaymentServiceImpl.java | 52 ++++++++++++++++--- 3 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/Transaction.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/repository/TransactionRepository.java diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/Transaction.java b/src/main/java/com/tarento/upsmf/userManagement/model/Transaction.java new file mode 100644 index 0000000..34526d6 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/model/Transaction.java @@ -0,0 +1,45 @@ +package com.tarento.upsmf.userManagement.model; + +import lombok.*; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import java.util.Date; + +@Entity +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +@ToString +@Table(name = "transactions") +public class Transaction { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String responseCode; + private String uniqueRefNumber; + private Double serviceTaxAmount; + private Double processingFeeAmount; + private Double totalAmount; + private Double transactionAmount; + private Date transactionDate; + private String interchangeValue; + private String tdr; + private String paymentMode; + private Integer subMerchantId; + private String referenceNo; + private Long entityId; + private String rs; + private String tps; + private String mandatoryFields; + private String optionalFields; + private String rsv; + private String module; + +} diff --git a/src/main/java/com/tarento/upsmf/userManagement/repository/TransactionRepository.java b/src/main/java/com/tarento/upsmf/userManagement/repository/TransactionRepository.java new file mode 100644 index 0000000..eea1126 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/repository/TransactionRepository.java @@ -0,0 +1,7 @@ +package com.tarento.upsmf.userManagement.repository; + +import com.tarento.upsmf.userManagement.model.Transaction; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface TransactionRepository extends JpaRepository { +} diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index a45d3f0..d73c9b3 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -1,7 +1,9 @@ package com.tarento.upsmf.userManagement.services.impl; import com.tarento.upsmf.userManagement.model.Payment; +import com.tarento.upsmf.userManagement.model.Transaction; import com.tarento.upsmf.userManagement.repository.PaymentRepository; +import com.tarento.upsmf.userManagement.repository.TransactionRepository; import com.tarento.upsmf.userManagement.services.PaymentService; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; @@ -23,9 +25,10 @@ import java.net.URISyntaxException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; import java.util.regex.Pattern; @Service @@ -40,7 +43,7 @@ public class PaymentServiceImpl implements PaymentService { private static Environment environment; @Autowired - PaymentRepository paymentRepository; + TransactionRepository repository; private String REGISTRATION_PAYMENT_GATEWAY_ENDPOINT; private String AFFILIATION_PAYMENT_GATEWAY_ENDPOINT; @@ -79,13 +82,48 @@ public ResponseEntity makePayment(Map requestData) { && requestData.get("Response Code").equals("E000")) { responseString = strEndPoint + "?resp=success"; logger.info("Payment is successful."); + /** + * save to postgresDB + */ + String date = requestData.get("Transaction Date"); + DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH); + Date transactionDate = null; + try { + transactionDate = format.parse(date); + } catch (ParseException e) { + throw new RuntimeException(e); + } + + Long id = Long.valueOf(requestData.get("ID")); + Double transactionAmount = Double.valueOf(requestData.get("Transaction Amount")); + String paymentMode = requestData.get("Payment Mode"); + String RS = requestData.get("RS"); + String RSV = requestData.get("RSV"); + String TDR = requestData.get("TDR"); + String interchangeValue = requestData.get("Interchange Value"); + Double processingFeeAmount = Double.valueOf(requestData.get("Processing Fee Amount")); + Double totalAmount = Double.valueOf(requestData.get("Total Amount")); + String TPS = requestData.get("TPS"); + Double serviceTaxAmount = Double.valueOf(requestData.get("Service Tax Amount")); + String optionalFields = requestData.get("optional fields"); + String module = requestData.get("module"); + String referenceNo = requestData.get("ReferenceNo"); + Integer subMerchantId = Integer.valueOf(requestData.get("SubMerchantId")); + String uniqueRefNumber = requestData.get("Unique Ref Number"); + String responseCode = requestData.get("Response Code"); + Transaction transaction = Transaction.builder().transactionDate(transactionDate) + .transactionAmount(transactionAmount).paymentMode(paymentMode).rs(RS).rsv(RSV).tdr(TDR) + .entityId(id).interchangeValue(interchangeValue).processingFeeAmount(processingFeeAmount) + .totalAmount(totalAmount).tps(TPS).serviceTaxAmount(serviceTaxAmount).mandatoryFields(mandatoryFields) + .optionalFields(optionalFields).module(module).referenceNo(referenceNo).subMerchantId(subMerchantId) + .uniqueRefNumber(uniqueRefNumber).responseCode(responseCode).build(); + transaction.setModule(strEndPoint); + logger.info("Record to be saved {}",transaction); + repository.save(transaction); } else { responseString = strEndPoint + "?resp=failure"; logger.info("Payment failed."); } - /** - * save to postgresDB - */ logger.info("responseString details...{} ", responseString); httpHeaders.setLocation(URI.create(responseString)); return new ResponseEntity(null, httpHeaders, HttpStatus.FOUND); From 4dfc4b4d509f463f9d824cc51cd188d73b7e8033 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 28 Aug 2023 17:43:50 +0530 Subject: [PATCH 57/87] pagination for list users feature . --- .../tarento/upsmf/userManagement/handler/UserHandler.java | 6 ++++-- .../upsmf/userManagement/utility/KeycloakUserGetter.java | 8 ++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 7b7557e..66155e9 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -64,14 +64,16 @@ public String updateUser(final JsonNode body) throws URISyntaxException, IOExcep public String userDetails(final JsonNode body) throws IOException { JsonNode request = body.get("request"); - String userName = keycloakUserGetter.findUser(request.get("userName").asText()); + String userName = keycloakUserGetter.findUser(request.get("userName").asText(),0,0); return userName; } public String listUser(final JsonNode body) throws URISyntaxException, IOException { logger.info("creating user with payload {} ", body.toPrettyString()); - String users = keycloakUserGetter.findUser(null); + int offset = body.get("offset").asInt(); + int size = body.get("size").asInt(); + String users = keycloakUserGetter.findUser(null,offset,size); return users; } diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java index dc6e403..30b2aff 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java @@ -41,13 +41,17 @@ public void init(){ public static String getPropertyValue(String property){ return environment.getProperty(property); } - public String findUser(final String userID) throws IOException { + public String findUser(final String userID, final int offset, final int size) throws IOException { String userEndpoint = KEYCLOAK_USER_BASE_URL; logger.info("userEndpoint: " ,userEndpoint); if(userID != null ) { userEndpoint = userEndpoint + "/" + userID; + } else { + String parameter = "?first=%s&max=%s"; + parameter = String.format(parameter,offset,size); + userEndpoint = userEndpoint + parameter; } - logger.info("userEndpoint after adding userId : " ,userEndpoint); + logger.info("userEndpoint {} after adding userId : " ,userEndpoint); JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); logger.info("adminToken: " ,adminToken); String accessToken = adminToken.get("access_token").asText(); From fc6d6603dc73a54446515c382be44d2cd92aaccf Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 28 Aug 2023 18:46:33 +0530 Subject: [PATCH 58/87] rearranging transaction code . --- .../userManagement/model/Transaction.java | 1 + .../services/impl/PaymentServiceImpl.java | 87 ++++++++++--------- 2 files changed, 48 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/Transaction.java b/src/main/java/com/tarento/upsmf/userManagement/model/Transaction.java index 34526d6..fc08dc8 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/model/Transaction.java +++ b/src/main/java/com/tarento/upsmf/userManagement/model/Transaction.java @@ -41,5 +41,6 @@ public class Transaction { private String optionalFields; private String rsv; private String module; + private String transaction_status; } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index d73c9b3..7e3da4c 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -77,60 +77,67 @@ public ResponseEntity makePayment(Map requestData) { } else if (strings.contains("affiliation")) { strEndPoint = AFFILIATION_PAYMENT_GATEWAY_ENDPOINT; } - String responseString = ""; + String responseString = "", transaction_status = ""; if ((requestData != null) && (requestData.get("Response Code") != null) && requestData.get("Response Code").equals("E000")) { responseString = strEndPoint + "?resp=success"; + transaction_status = "success"; logger.info("Payment is successful."); - /** - * save to postgresDB - */ - String date = requestData.get("Transaction Date"); - DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH); - Date transactionDate = null; - try { - transactionDate = format.parse(date); - } catch (ParseException e) { - throw new RuntimeException(e); - } - - Long id = Long.valueOf(requestData.get("ID")); - Double transactionAmount = Double.valueOf(requestData.get("Transaction Amount")); - String paymentMode = requestData.get("Payment Mode"); - String RS = requestData.get("RS"); - String RSV = requestData.get("RSV"); - String TDR = requestData.get("TDR"); - String interchangeValue = requestData.get("Interchange Value"); - Double processingFeeAmount = Double.valueOf(requestData.get("Processing Fee Amount")); - Double totalAmount = Double.valueOf(requestData.get("Total Amount")); - String TPS = requestData.get("TPS"); - Double serviceTaxAmount = Double.valueOf(requestData.get("Service Tax Amount")); - String optionalFields = requestData.get("optional fields"); - String module = requestData.get("module"); - String referenceNo = requestData.get("ReferenceNo"); - Integer subMerchantId = Integer.valueOf(requestData.get("SubMerchantId")); - String uniqueRefNumber = requestData.get("Unique Ref Number"); - String responseCode = requestData.get("Response Code"); - Transaction transaction = Transaction.builder().transactionDate(transactionDate) - .transactionAmount(transactionAmount).paymentMode(paymentMode).rs(RS).rsv(RSV).tdr(TDR) - .entityId(id).interchangeValue(interchangeValue).processingFeeAmount(processingFeeAmount) - .totalAmount(totalAmount).tps(TPS).serviceTaxAmount(serviceTaxAmount).mandatoryFields(mandatoryFields) - .optionalFields(optionalFields).module(module).referenceNo(referenceNo).subMerchantId(subMerchantId) - .uniqueRefNumber(uniqueRefNumber).responseCode(responseCode).build(); - transaction.setModule(strEndPoint); - logger.info("Record to be saved {}",transaction); - repository.save(transaction); + logger.info("Record saved to DB."); } else { responseString = strEndPoint + "?resp=failure"; + transaction_status = "failed."; logger.info("Payment failed."); } - logger.info("responseString details...{} ", responseString); + logger.info("creating transaction."); + Transaction transaction = getTransaction(requestData, strEndPoint, transaction_status); + repository.save(transaction); + logger.info("Transaction {} saved. ResponseString details...{} ", transaction, responseString); httpHeaders.setLocation(URI.create(responseString)); return new ResponseEntity(null, httpHeaders, HttpStatus.FOUND); } return new ResponseEntity(null, httpHeaders, HttpStatus.NOT_FOUND); } + private Transaction getTransaction(final Map requestData, final String strEndPoint, final String transaction_status) { + Long id = Long.valueOf(requestData.get("ID")); + Double transactionAmount = Double.valueOf(requestData.get("Transaction Amount")); + String paymentMode = requestData.get("Payment Mode"); + String RS = requestData.get("RS"); + String RSV = requestData.get("RSV"); + String TDR = requestData.get("TDR"); + String interchangeValue = requestData.get("Interchange Value"); + Double processingFeeAmount = Double.valueOf(requestData.get("Processing Fee Amount")); + Double totalAmount = Double.valueOf(requestData.get("Total Amount")); + String TPS = requestData.get("TPS"); + Double serviceTaxAmount = Double.valueOf(requestData.get("Service Tax Amount")); + String optionalFields = requestData.get("optional fields"); + String module = requestData.get("module"); + String referenceNo = requestData.get("ReferenceNo"); + Integer subMerchantId = Integer.valueOf(requestData.get("SubMerchantId")); + String uniqueRefNumber = requestData.get("Unique Ref Number"); + String responseCode = requestData.get("Response Code"); + + String date = requestData.get("Transaction Date"); + DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH); + Date transactionDate = null; + try { + transactionDate = format.parse(date); + } catch (ParseException e) { + logger.error("parsing date failed.",e); + } + String mandatoryFields = requestData.get("mandatory fields"); + Transaction transaction = Transaction.builder().transactionDate(transactionDate) + .transactionAmount(transactionAmount).paymentMode(paymentMode).rs(RS).rsv(RSV).tdr(TDR) + .entityId(id).interchangeValue(interchangeValue).processingFeeAmount(processingFeeAmount) + .totalAmount(totalAmount).tps(TPS).serviceTaxAmount(serviceTaxAmount).mandatoryFields(mandatoryFields) + .optionalFields(optionalFields).module(module).referenceNo(referenceNo).subMerchantId(subMerchantId) + .uniqueRefNumber(uniqueRefNumber).responseCode(responseCode).transaction_status(transaction_status).build(); + transaction.setModule(strEndPoint); + logger.info("Record to be saved {}",transaction); + return transaction; + } + private String sha512Hash(String input) { try { MessageDigest digest = MessageDigest.getInstance("SHA-512"); From 391e6141722c031f03e5b8f74f630f3615852eac Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 28 Aug 2023 18:51:46 +0530 Subject: [PATCH 59/87] checking for null . --- .../userManagement/services/impl/PaymentServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 7e3da4c..2616584 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -118,10 +118,10 @@ private Transaction getTransaction(final Map requestData, final String uniqueRefNumber = requestData.get("Unique Ref Number"); String responseCode = requestData.get("Response Code"); - String date = requestData.get("Transaction Date"); - DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH); Date transactionDate = null; try { + String date = requestData.get("Transaction Date") != null ? requestData.get("Transaction Date") : ""; + DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH); transactionDate = format.parse(date); } catch (ParseException e) { logger.error("parsing date failed.",e); From 4c00ada5e8d0a8fe182c3cc66fdf74b45e88a728 Mon Sep 17 00:00:00 2001 From: Radheshhathwar Date: Tue, 29 Aug 2023 14:31:44 +0530 Subject: [PATCH 60/87] Changes the date format --- .../upsmf/userManagement/services/impl/PaymentServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 2616584..d236bf0 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -121,7 +121,7 @@ private Transaction getTransaction(final Map requestData, final Date transactionDate = null; try { String date = requestData.get("Transaction Date") != null ? requestData.get("Transaction Date") : ""; - DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH); + DateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); transactionDate = format.parse(date); } catch (ParseException e) { logger.error("parsing date failed.",e); From dbacc23b9666f49ccfc9742780a2d8dd2116cad3 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Tue, 29 Aug 2023 16:40:35 +0530 Subject: [PATCH 61/87] adding transaction deatils to return url . --- .../services/impl/PaymentServiceImpl.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index d236bf0..14d48b8 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -78,14 +78,15 @@ public ResponseEntity makePayment(Map requestData) { strEndPoint = AFFILIATION_PAYMENT_GATEWAY_ENDPOINT; } String responseString = "", transaction_status = ""; + String transactionDetails = getTransactionDetails(requestData); if ((requestData != null) && (requestData.get("Response Code") != null) && requestData.get("Response Code").equals("E000")) { - responseString = strEndPoint + "?resp=success"; + responseString = strEndPoint + "?resp=success" + transactionDetails; transaction_status = "success"; logger.info("Payment is successful."); logger.info("Record saved to DB."); } else { - responseString = strEndPoint + "?resp=failure"; + responseString = strEndPoint + "?resp=failure" + transactionDetails; transaction_status = "failed."; logger.info("Payment failed."); } @@ -99,6 +100,14 @@ public ResponseEntity makePayment(Map requestData) { return new ResponseEntity(null, httpHeaders, HttpStatus.NOT_FOUND); } + private String getTransactionDetails(Map requestData) { + String transactionAmount = requestData.get("Transaction Amount") != null ? requestData.get("Transaction Amount") : ""; + String uniqueRefNumber = requestData.get("Unique Ref Number") != null ? requestData.get("Unique Ref Number") : ""; + String response = "&transaction_amount="+transactionAmount+"&transaction_id="+uniqueRefNumber; + logger.info("transaction details {}",response); + return response; + } + private Transaction getTransaction(final Map requestData, final String strEndPoint, final String transaction_status) { Long id = Long.valueOf(requestData.get("ID")); Double transactionAmount = Double.valueOf(requestData.get("Transaction Amount")); From 14064d1728c015e63fdfb53263fb9dd61bc422ed Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Tue, 29 Aug 2023 18:10:44 +0530 Subject: [PATCH 62/87] adding an API to fetch user info by email attribute . --- .../controller/UserController.java | 5 ++++ .../userManagement/handler/UserHandler.java | 6 +++++ .../utility/KeycloakUserGetter.java | 25 +++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index aef379d..4b5f006 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -37,6 +37,11 @@ public String userDetails(@RequestBody final JsonNode body) throws URISyntaxExce return userHandler.userDetails(body); } + @PostMapping(value = "/emaildetails", consumes = "application/json", produces = "application/json") + public String userEmailDetails(@RequestBody final JsonNode body) throws URISyntaxException, IOException { + return userHandler.userEmailDetails(body); + } + @PostMapping(value = "/list", consumes = "application/json", produces = "application/json") public String listUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { return userHandler.listUser(body); diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 66155e9..d842b6b 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -68,6 +68,12 @@ public String userDetails(final JsonNode body) throws IOException { return userName; } + public String userEmailDetails(final JsonNode body) throws IOException { + JsonNode request = body.get("request"); + String userName = keycloakUserGetter.findUserByEmail(request.get("fieldName").asText(), request.get("fieldValue").asText()); + return userName; + } + public String listUser(final JsonNode body) throws URISyntaxException, IOException { logger.info("creating user with payload {} ", body.toPrettyString()); diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java index 30b2aff..60e5344 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java @@ -68,4 +68,29 @@ public String findUser(final String userID, final int offset, final int size) th logger.info("ResponseBody {}", responseBody); return responseBody; } + + public String findUserByEmail(final String fieldName, final String fieldValue) throws IOException { + String userEndpoint = KEYCLOAK_USER_BASE_URL; + logger.info("userEndpoint: " ,userEndpoint); + if(fieldName != null && fieldValue!= null ) { + userEndpoint = userEndpoint + "?" + fieldName + "=" + fieldValue; + logger.info("userEndpoint {} after adding email : " ,userEndpoint); + JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); + logger.info("adminToken: " ,adminToken); + String accessToken = adminToken.get("access_token").asText(); + logger.info("accessToken: " ,accessToken); + + HttpClient httpClient = HttpClients.createDefault(); + HttpGet httpGet = new HttpGet(userEndpoint); + + httpGet.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); + httpGet.setHeader(HttpHeaders.ACCEPT, "application/json"); + + org.apache.http.HttpResponse response = httpClient.execute(httpGet); + String responseBody = EntityUtils.toString(response.getEntity()); + logger.info("ResponseBody {}", responseBody); + return responseBody; + } + return "No Response Generated since the inputs were null/empty."; + } } From 9ebaae1298d8bbb5df1b90fe3447db5772784d26 Mon Sep 17 00:00:00 2001 From: Radheshhathwar Date: Tue, 29 Aug 2023 18:12:28 +0530 Subject: [PATCH 63/87] Added fetchAll and fetchBy uniqueRefNum --- .../controller/UserController.java | 13 ++++++++- .../userManagement/handler/UserHandler.java | 12 ++++++-- .../repository/TransactionRepository.java | 1 + .../userManagement/services/UserService.java | 29 +++++++++++++++++-- src/main/resources/application.properties | 2 +- 5 files changed, 50 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 4b5f006..d4dc2c7 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.tarento.upsmf.userManagement.handler.UserHandler; +import com.tarento.upsmf.userManagement.model.Transaction; import com.tarento.upsmf.userManagement.services.PaymentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; @@ -10,6 +11,7 @@ import java.io.IOException; import java.net.URISyntaxException; +import java.util.List; import java.util.Map; @RestController @@ -86,5 +88,14 @@ public String usrlogin(@RequestBody JsonNode body) throws IOException { public String usrOTP(@RequestBody JsonNode body) throws IOException { return userHandler.usrOTP(body); } - + + @GetMapping(value = "/transaction", produces = "application/json") + public ResponseEntity> getAllTransactions() { + return userHandler.getAllTransactions(); + } + + @GetMapping(value = "/transaction/{uniqueRefNumber}", produces = "application/json") + public ResponseEntity getTransactionByUniqueRefNumber(@PathVariable String uniqueRefNumber) { + return userHandler.getTransactionByUniqueRefNumber(uniqueRefNumber); + } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index d842b6b..96571cc 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.tarento.upsmf.userManagement.model.Payment; +import com.tarento.upsmf.userManagement.model.Transaction; import com.tarento.upsmf.userManagement.services.UserService; import com.tarento.upsmf.userManagement.utility.*; import org.slf4j.Logger; @@ -12,6 +13,7 @@ import java.io.IOException; import java.net.URISyntaxException; +import java.util.List; import java.util.Map; @Component @@ -141,8 +143,14 @@ public String usrLogin(JsonNode body) throws IOException { } public String usrOTP(JsonNode body) throws IOException { - logger.info("OTP mail to user with body {}",body); + logger.info("OTP mail to user with body {}", body); return userService.usrOTP(body); } - + public ResponseEntity> getAllTransactions() { + return userService.getAllTransactions(); + } + + public ResponseEntity getTransactionByUniqueRefNumber(String uniqueRefNumber) { + return userService.getTransactionByUniqueRefNumber(uniqueRefNumber); + } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/repository/TransactionRepository.java b/src/main/java/com/tarento/upsmf/userManagement/repository/TransactionRepository.java index eea1126..f79305e 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/repository/TransactionRepository.java +++ b/src/main/java/com/tarento/upsmf/userManagement/repository/TransactionRepository.java @@ -4,4 +4,5 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface TransactionRepository extends JpaRepository { + Transaction findByUniqueRefNumber(String uniqueRefNumber); } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 99314c1..8d15ed6 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -1,7 +1,8 @@ package com.tarento.upsmf.userManagement.services; import com.fasterxml.jackson.databind.JsonNode; -import com.tarento.upsmf.userManagement.model.Payment; +import com.tarento.upsmf.userManagement.model.Transaction; +import com.tarento.upsmf.userManagement.repository.TransactionRepository; import com.tarento.upsmf.userManagement.utility.KeycloakTokenRetriever; import com.tarento.upsmf.userManagement.utility.KeycloakUserCredentialPersister; import com.tarento.upsmf.userManagement.utility.SunbirdRCKeycloakTokenRetriever; @@ -20,8 +21,11 @@ import javax.annotation.PostConstruct; import java.io.IOException; -import java.net.*; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.List; import java.util.Map; +import java.util.Optional; @Component @PropertySource({ "classpath:application.properties" }) @@ -44,6 +48,9 @@ public class UserService { @Autowired private KeycloakUserCredentialPersister keycloakUserCredentialPersister; + @Autowired + private TransactionRepository transactionRepository; + private static Environment environment; private String BASE_URL; private String KEYCLOAK_BASEURL; @@ -197,5 +204,21 @@ public String usrOTP(JsonNode body) throws IOException { logger.info("OTP mail to user with body {}",body); return keycloakUserCredentialPersister.sendOTPMail(body); } + public ResponseEntity> getAllTransactions() { + List result = transactionRepository.findAll(); + if (result.isEmpty()) { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + return new ResponseEntity<>(result, HttpStatus.OK); + } + + public ResponseEntity getTransactionByUniqueRefNumber(String uniqueRefNumber) { + Transaction transaction = transactionRepository.findByUniqueRefNumber(uniqueRefNumber); + if (transaction == null) { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + return new ResponseEntity<>(transaction, HttpStatus.OK); + } + -} +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a31f09e..f787335 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -27,7 +27,7 @@ spring.datasource.password=postgres spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true spring.jpa.show-sql=false -spring.jpa.hibernate.ddl-auto=create +spring.jpa.hibernate.ddl-auto=none otp.mail.endpoint = /api/v1/keycloak/mail/sendOTP user.create.mail.endpoint =/api/v1/keycloak/mail/userCreate From c9c2ab6e95bac5f223e97f8f3e80368cf7c23544 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Wed, 30 Aug 2023 11:02:03 +0530 Subject: [PATCH 64/87] adding logger . --- .../upsmf/userManagement/utility/KeycloakTokenRetriever.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java index 02ad52f..2bdb09f 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java @@ -73,6 +73,7 @@ public JsonNode getAdminToken() throws IOException { String responseBody = EntityUtils.toString(response.getEntity()); logger.info("Response body: {}", responseBody); JsonNode jsonNode = mapper.readTree(responseBody); + logger.info("jsonNode : {}", jsonNode); return jsonNode; } } From 4e9f9991ecee537fb472084e986ed156ff2bd09d Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Wed, 30 Aug 2023 11:12:54 +0530 Subject: [PATCH 65/87] adding more loggers . --- .../upsmf/userManagement/utility/KeycloakUserGetter.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java index 60e5344..0e8f3e6 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java @@ -76,9 +76,9 @@ public String findUserByEmail(final String fieldName, final String fieldValue) t userEndpoint = userEndpoint + "?" + fieldName + "=" + fieldValue; logger.info("userEndpoint {} after adding email : " ,userEndpoint); JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); - logger.info("adminToken: " ,adminToken); + logger.info("adminToken: {}" ,adminToken); String accessToken = adminToken.get("access_token").asText(); - logger.info("accessToken: " ,accessToken); + logger.info("accessToken: {}" ,accessToken); HttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(userEndpoint); @@ -87,6 +87,7 @@ public String findUserByEmail(final String fieldName, final String fieldValue) t httpGet.setHeader(HttpHeaders.ACCEPT, "application/json"); org.apache.http.HttpResponse response = httpClient.execute(httpGet); + logger.info("url to be hit {} ",httpGet.toString()); String responseBody = EntityUtils.toString(response.getEntity()); logger.info("ResponseBody {}", responseBody); return responseBody; From 293b6eff8c52cb9194ad7934176fc2ddc99af76c Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Wed, 30 Aug 2023 14:53:55 +0530 Subject: [PATCH 66/87] adding user count to list user API . --- .../controller/UserController.java | 5 ++ .../userManagement/handler/UserHandler.java | 15 ++++- .../userManagement/services/UserService.java | 8 +++ .../utility/KeycloakTokenRetriever.java | 7 +-- .../utility/KeycloakUserCount.java | 59 +++++++++++++++++++ .../utility/KeycloakUserCreator.java | 5 +- .../utility/KeycloakUserGetter.java | 19 +++++- src/main/resources/logback.xml | 37 ------------ 8 files changed, 106 insertions(+), 49 deletions(-) create mode 100644 src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCount.java delete mode 100644 src/main/resources/logback.xml diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index d4dc2c7..51088af 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -49,6 +49,11 @@ public String listUser(@RequestBody final JsonNode body) throws URISyntaxExcepti return userHandler.listUser(body); } + @GetMapping(value = "/count", produces = "application/json") + public String userCount() throws IOException { + return userHandler.userCount(); + } + @PostMapping(value = "/activate", consumes = "application/json", produces = "application/json") public String activateUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException { return userHandler.activateUser(body); diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index 96571cc..d0f739a 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -1,6 +1,9 @@ package com.tarento.upsmf.userManagement.handler; import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.tarento.upsmf.userManagement.model.Payment; import com.tarento.upsmf.userManagement.model.Transaction; import com.tarento.upsmf.userManagement.services.UserService; @@ -35,6 +38,7 @@ public class UserHandler { @Autowired private KeycloakUserActivateDeActivate keycloakUserActivateDeActivate; + private ObjectMapper mapper = new ObjectMapper(); public String createUser(final JsonNode body) throws URISyntaxException, IOException { logger.info("creating user with payload {} ", body.toPrettyString()); String response = keycloakUserCreator.createUser(body); @@ -82,7 +86,16 @@ public String listUser(final JsonNode body) throws URISyntaxException, IOExcepti int offset = body.get("offset").asInt(); int size = body.get("size").asInt(); String users = keycloakUserGetter.findUser(null,offset,size); - return users; + JsonNode jsonNode = mapper.readTree(users); + JsonNode totalcount = mapper.createObjectNode(); + String count = userService.userCount(); + ((ObjectNode)totalcount).put("totalCount",count); + ((ArrayNode)jsonNode).set(0,totalcount); + return jsonNode.toPrettyString(); + } + + public String userCount() throws IOException { + return userService.userCount(); } public String activateUser(final JsonNode body) throws URISyntaxException, IOException { diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 8d15ed6..f431b65 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -4,6 +4,7 @@ import com.tarento.upsmf.userManagement.model.Transaction; import com.tarento.upsmf.userManagement.repository.TransactionRepository; import com.tarento.upsmf.userManagement.utility.KeycloakTokenRetriever; +import com.tarento.upsmf.userManagement.utility.KeycloakUserCount; import com.tarento.upsmf.userManagement.utility.KeycloakUserCredentialPersister; import com.tarento.upsmf.userManagement.utility.SunbirdRCKeycloakTokenRetriever; import org.apache.http.client.HttpClient; @@ -51,6 +52,9 @@ public class UserService { @Autowired private TransactionRepository transactionRepository; + @Autowired + private KeycloakUserCount keycloakUserCount; + private static Environment environment; private String BASE_URL; private String KEYCLOAK_BASEURL; @@ -121,6 +125,10 @@ public ResponseEntity listUser(final JsonNode body) throws URISyntaxEx return result; } + public String userCount() throws IOException { + return keycloakUserCount.getUserCount(); + } + public ResponseEntity activateUser(final JsonNode body) throws URISyntaxException{ logger.info("activateUser user...{} ", body.toPrettyString()); RestTemplate restTemplate = new RestTemplate(); diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java index 2bdb09f..89af786 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java @@ -54,9 +54,9 @@ public static String getPropertyValue(String property){ public JsonNode getAdminToken() throws IOException { String tokenEndpoint = ADMIN_TOKEN_ENDPOINT; logger.info("Token endpoint: {}" ,tokenEndpoint); + HttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(tokenEndpoint); - httpPost.setHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded"); String requestBody = "username=" + ADMIN_USERNAME + @@ -64,16 +64,15 @@ public JsonNode getAdminToken() throws IOException { "&grant_type=client_credentials" + "&client_id=admin-cli" + "&client_secret=" + ADMIN_TOKEN_SECRET; - logger.info("Request body: {}", requestBody); + StringEntity entity = new StringEntity(requestBody); httpPost.setEntity(entity); org.apache.http.HttpResponse response = httpClient.execute(httpPost); String responseBody = EntityUtils.toString(response.getEntity()); - logger.info("Response body: {}", responseBody); JsonNode jsonNode = mapper.readTree(responseBody); - logger.info("jsonNode : {}", jsonNode); + return jsonNode; } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCount.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCount.java new file mode 100644 index 0000000..91e3e81 --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCount.java @@ -0,0 +1,59 @@ +package com.tarento.upsmf.userManagement.utility; + +import com.fasterxml.jackson.databind.JsonNode; +import org.apache.http.HttpHeaders; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.IOException; + +@Component +@PropertySource({ "classpath:application.properties" }) +public class KeycloakUserCount { + + private static final Logger logger = LoggerFactory.getLogger(KeycloakUserCount.class); + + @Autowired + private Environment env; + + private static Environment environment; + + private String KEYCLOAK_USER_BASE_URL; + + @Autowired + private KeycloakTokenRetriever keycloakTokenRetriever; + + @PostConstruct + public void init(){ + environment = env; + KEYCLOAK_USER_BASE_URL = getPropertyValue("keycloak.user.baseURL"); + } + + public static String getPropertyValue(String property){ + return environment.getProperty(property); + } + + public String getUserCount() throws IOException { + logger.info("userEndpoint {} " ,KEYCLOAK_USER_BASE_URL); + JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); + String accessToken = adminToken.get("access_token").asText(); + HttpClient httpClient = HttpClients.createDefault(); + HttpGet httpGet = new HttpGet(KEYCLOAK_USER_BASE_URL+"/count"); + httpGet.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken); + httpGet.setHeader(HttpHeaders.ACCEPT, "application/json"); + org.apache.http.HttpResponse response = httpClient.execute(httpGet); + String responseBody = EntityUtils.toString(response.getEntity()); + logger.info("ResponseBody {}", responseBody); + return responseBody; + } + +} diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java index 4667c52..5292c7d 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java @@ -62,9 +62,7 @@ public String createUser(final JsonNode request) throws IOException { String keycloakBaseUrl = KEYCLOAK_USER_BASE_URL; logger.info("keycloakBaseUrl: " ,keycloakBaseUrl); JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); - logger.info("adminToken: {}" ,adminToken); String accessToken = adminToken.get("access_token").asText(); - logger.info("accessToken: {}" ,accessToken); HttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(keycloakBaseUrl); @@ -80,7 +78,6 @@ public String createUser(final JsonNode request) throws IOException { HttpResponse response = httpClient.execute(httpPost); logger.info("Response from httpClient call : {}", response); String responseBody = EntityUtils.toString(response.getEntity()); - logger.info("Response from keycloak Rest API call : {}", responseBody); if (response.getStatusLine().getStatusCode() == 201) { String location = response.getFirstHeader("location").getValue(); location = location.substring(location.lastIndexOf("/")+1); @@ -97,7 +94,7 @@ public String createUser(final JsonNode request) throws IOException { ((ObjectNode)mailPayLoad).put("userId",location); keycloakUserCredentialPersister.sendUserCreateMail(mailPayLoad); }catch (Exception ex){ - logger.error("error occured {}",ex); + logger.error("error occurred.",ex); } } logger.info("ResponseBody {}", responseBody); diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java index 0e8f3e6..543b27d 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java @@ -15,6 +15,8 @@ import javax.annotation.PostConstruct; import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; @Component @PropertySource({ "classpath:application.properties" }) @@ -53,9 +55,9 @@ public String findUser(final String userID, final int offset, final int size) th } logger.info("userEndpoint {} after adding userId : " ,userEndpoint); JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); - logger.info("adminToken: " ,adminToken); + logger.info("adminToken: {}" ,adminToken); String accessToken = adminToken.get("access_token").asText(); - logger.info("accessToken: " ,accessToken); + logger.info("accessToken: {}" ,accessToken); HttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(userEndpoint); @@ -73,7 +75,13 @@ public String findUserByEmail(final String fieldName, final String fieldValue) t String userEndpoint = KEYCLOAK_USER_BASE_URL; logger.info("userEndpoint: " ,userEndpoint); if(fieldName != null && fieldValue!= null ) { - userEndpoint = userEndpoint + "?" + fieldName + "=" + fieldValue; + if(fieldName.equalsIgnoreCase("email")) { + String encodeEmail = encodeEmail(fieldValue); + userEndpoint = userEndpoint + "?" + fieldName + "=" + encodeEmail; + } else { + userEndpoint = userEndpoint + "?" + fieldName + "=" + fieldValue; + } + logger.info("userEndpoint {} after adding email : " ,userEndpoint); JsonNode adminToken = keycloakTokenRetriever.getAdminToken(); logger.info("adminToken: {}" ,adminToken); @@ -94,4 +102,9 @@ public String findUserByEmail(final String fieldName, final String fieldValue) t } return "No Response Generated since the inputs were null/empty."; } + + private String encodeEmail(String email) throws UnsupportedEncodingException { + String encode = URLEncoder.encode(email, "UTF-8"); + return encode; + } } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml deleted file mode 100644 index 12645c3..0000000 --- a/src/main/resources/logback.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - %highlight(%date{ISO8601}) %highlight([%level]) %highlight([%10thread]) %colorize(%-40logger{36}) - %colorize(%msg%n) - - - - - ${LOGS}/upsmf-userManagement-logger.log - - %d %p %C{1.} [%t] %m%n - - - - - ${LOGS}/archived/upsmf-userManagement-logger-%d{yyyy-MM-dd}.%i.log - - - 10MB - - - - - - - - - From 6d5fd5a75e54212892ca1638bdd6773eded65e1c Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 31 Aug 2023 17:37:07 +0530 Subject: [PATCH 67/87] adding null checks for failed transactions . --- .../services/impl/PaymentServiceImpl.java | 95 +++++++++++++++---- 1 file changed, 79 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 14d48b8..e17f6e7 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -109,22 +109,85 @@ private String getTransactionDetails(Map requestData) { } private Transaction getTransaction(final Map requestData, final String strEndPoint, final String transaction_status) { - Long id = Long.valueOf(requestData.get("ID")); - Double transactionAmount = Double.valueOf(requestData.get("Transaction Amount")); - String paymentMode = requestData.get("Payment Mode"); - String RS = requestData.get("RS"); - String RSV = requestData.get("RSV"); - String TDR = requestData.get("TDR"); - String interchangeValue = requestData.get("Interchange Value"); - Double processingFeeAmount = Double.valueOf(requestData.get("Processing Fee Amount")); - Double totalAmount = Double.valueOf(requestData.get("Total Amount")); - String TPS = requestData.get("TPS"); - Double serviceTaxAmount = Double.valueOf(requestData.get("Service Tax Amount")); - String optionalFields = requestData.get("optional fields"); - String module = requestData.get("module"); - String referenceNo = requestData.get("ReferenceNo"); - Integer subMerchantId = Integer.valueOf(requestData.get("SubMerchantId")); - String uniqueRefNumber = requestData.get("Unique Ref Number"); + + Long id = -1L; + if(requestData.get("ID") != null) { + id = Long.valueOf(requestData.get("ID")); + } + + Double transactionAmount = -1.00; + if(requestData.get("Transaction Amount") != null) { + transactionAmount = Double.valueOf(requestData.get("Transaction Amount")); + } + + String paymentMode = ""; + if(requestData.get("Payment Mode") != null) { + paymentMode = requestData.get("Payment Mode"); + } + + String RS = ""; + if(requestData.get("RS") != null) { + RS = requestData.get("RS"); + } + String RSV = ""; + if(requestData.get("RSV") != null) { + RSV = requestData.get("RSV"); + } + String TDR = ""; + if(requestData.get("TDR") != null) { + TDR = requestData.get("TDR"); + } + String interchangeValue = ""; + if(requestData.get("Interchange Value") != null) { + interchangeValue = requestData.get("Interchange Value"); + } + + Double processingFeeAmount = -1.00; + if(requestData.get("Processing Fee Amount") != null) { + processingFeeAmount = Double.valueOf(requestData.get("Processing Fee Amount")); + } + + Double totalAmount = -1.00; + if(requestData.get("Total Amount") != null) { + totalAmount = Double.valueOf(requestData.get("Total Amount")); + } + + String TPS = ""; + if(requestData.get("TPS") != null) { + TPS = requestData.get("TPS"); + } + + Double serviceTaxAmount = -1.00; + if(requestData.get("Service Tax Amount") != null) { + serviceTaxAmount = Double.valueOf(requestData.get("Service Tax Amount")); + } + + String optionalFields = ""; + if(requestData.get("optional fields") != null) { + optionalFields = requestData.get("optional fields"); + } + + String module = ""; + if(requestData.get("module") != null) { + module = requestData.get("module"); + } + + String referenceNo = ""; + if(requestData.get("ReferenceNo") != null) { + referenceNo = requestData.get("ReferenceNo"); + } + + Integer subMerchantId = -1; + if(requestData.get("SubMerchantId") != null) { + subMerchantId = Integer.valueOf(requestData.get("SubMerchantId")); + } + + String uniqueRefNumber = null; + if(requestData.get("Unique Ref Number") != null) { + uniqueRefNumber = requestData.get("Unique Ref Number"); + } + + String responseCode = requestData.get("Response Code"); Date transactionDate = null; From abbdde26d5e405d2c1aca81a06a32418c5140dcc Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Fri, 1 Sep 2023 16:30:40 +0530 Subject: [PATCH 68/87] saving user info while updating the user . --- .../services/impl/PaymentServiceImpl.java | 5 +++-- .../userManagement/utility/KeycloakUserUpdater.java | 11 ++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index e17f6e7..2c32398 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -187,14 +187,15 @@ private Transaction getTransaction(final Map requestData, final uniqueRefNumber = requestData.get("Unique Ref Number"); } - String responseCode = requestData.get("Response Code"); Date transactionDate = null; try { String date = requestData.get("Transaction Date") != null ? requestData.get("Transaction Date") : ""; DateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); - transactionDate = format.parse(date); + if(!date.isBlank()) { + transactionDate = format.parse(date); + } } catch (ParseException e) { logger.error("parsing date failed.",e); } diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java index 20917a7..5dd08a9 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java @@ -1,6 +1,7 @@ package com.tarento.upsmf.userManagement.utility; import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; import org.apache.http.HttpHeaders; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; @@ -29,9 +30,11 @@ public class KeycloakUserUpdater { private KeycloakTokenRetriever keycloakTokenRetriever; private static Environment environment; private static final Logger logger = LoggerFactory.getLogger(KeycloakUserUpdater.class); - private String KEYCLOAK_USER_BASE_URL; + @Autowired + private KeycloakUserCredentialPersister keycloakUserCredentialPersister; + @PostConstruct public void init(){ environment = env; @@ -62,6 +65,12 @@ public String updateUser(final JsonNode requestBody, final String userName) thro } logger.info("ResponseBody {}", responseBody); if (response.getStatusLine().getStatusCode() == 204) { + if(requestBody.get("credentials")!=null){ + ArrayNode credentials = (ArrayNode)requestBody.get("credentials"); + if(!credentials.isEmpty() && !(credentials.get(0).get("value").asText().isBlank())) { + keycloakUserCredentialPersister.persistUserInfo(userName, credentials.get(0).get("value").asText()); + } + } responseBody = " Status 200. User updated successfully."; } else { responseBody = "Failed to update user." + responseBody; From 9318efd9a92c3e931230484e875b193aac805e79 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 4 Sep 2023 15:07:00 +0530 Subject: [PATCH 69/87] adding loggers to print repsonse . --- .../upsmf/userManagement/utility/KeycloakUserUpdater.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java index 5dd08a9..08d2168 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java @@ -59,6 +59,7 @@ public String updateUser(final JsonNode requestBody, final String userName) thro StringEntity entity = new StringEntity(requestBody.toPrettyString()); httpPut.setEntity(entity); HttpResponse response = httpClient.execute(httpPut); + logger.info("Response after execution: {}",response); String responseBody = ""; if(response.getEntity() != null) { responseBody = EntityUtils.toString(response.getEntity()); From 5d3e79de4241077e8ce4113933db792759440995 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 4 Sep 2023 16:36:15 +0530 Subject: [PATCH 70/87] adding loggers to debug . --- .../userManagement/utility/KeycloakUserUpdater.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java index 08d2168..fbbca13 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java @@ -59,17 +59,23 @@ public String updateUser(final JsonNode requestBody, final String userName) thro StringEntity entity = new StringEntity(requestBody.toPrettyString()); httpPut.setEntity(entity); HttpResponse response = httpClient.execute(httpPut); - logger.info("Response after execution: {}",response); + logger.info("******** Response after execution: {} ********",response); String responseBody = ""; if(response.getEntity() != null) { + logger.info("******** Response Entity: {} ********",response.getEntity()); responseBody = EntityUtils.toString(response.getEntity()); } logger.info("ResponseBody {}", responseBody); + logger.info("response.getStatusLine().getStatusCode() {} ", response.getStatusLine().getStatusCode()); if (response.getStatusLine().getStatusCode() == 204) { if(requestBody.get("credentials")!=null){ + logger.info("credentials is not null"); ArrayNode credentials = (ArrayNode)requestBody.get("credentials"); + logger.info("credentials[] {}", credentials); if(!credentials.isEmpty() && !(credentials.get(0).get("value").asText().isBlank())) { - keycloakUserCredentialPersister.persistUserInfo(userName, credentials.get(0).get("value").asText()); + logger.info("userName : {}, credentials.get(0).get(\"value\").asText() : {}",userName, credentials.get(0).get("value").asText()); + String value = keycloakUserCredentialPersister.persistUserInfo(userName, credentials.get(0).get("value").asText()); + logger.info("persistUserInfo response {}", value); } } responseBody = " Status 200. User updated successfully."; From 2e337eff0ad75c828001ab5c478862c5145c1015 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Mon, 4 Sep 2023 17:59:39 +0530 Subject: [PATCH 71/87] adding email instaed of username to save user info . --- .../upsmf/userManagement/utility/KeycloakUserUpdater.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java index fbbca13..a8fad0d 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java +++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java @@ -73,8 +73,9 @@ public String updateUser(final JsonNode requestBody, final String userName) thro ArrayNode credentials = (ArrayNode)requestBody.get("credentials"); logger.info("credentials[] {}", credentials); if(!credentials.isEmpty() && !(credentials.get(0).get("value").asText().isBlank())) { - logger.info("userName : {}, credentials.get(0).get(\"value\").asText() : {}",userName, credentials.get(0).get("value").asText()); - String value = keycloakUserCredentialPersister.persistUserInfo(userName, credentials.get(0).get("value").asText()); + String email = requestBody.get("email").asText(); + logger.info("email : {}, credentials.get(0).get(\"value\").asText() : {}",email, credentials.get(0).get("value").asText()); + String value = keycloakUserCredentialPersister.persistUserInfo(email, credentials.get(0).get("value").asText()); logger.info("persistUserInfo response {}", value); } } From d990b560218d476b475f3050e676dc942df1694e Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 14 Sep 2023 12:54:40 +0530 Subject: [PATCH 72/87] adding user listing feature with user attribute search . --- .../controller/UserController.java | 7 +- .../userManagement/handler/UserHandler.java | 7 +- .../model/UserAttributeModel.java | 25 +++++ .../repository/UserAttributeRepository.java | 15 +++ .../userManagement/services/UserService.java | 101 +++++++++++++++++- src/main/resources/application.properties | 4 +- 6 files changed, 152 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/UserAttributeModel.java create mode 100644 src/main/java/com/tarento/upsmf/userManagement/repository/UserAttributeRepository.java diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 51088af..86dfc8b 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -5,12 +5,12 @@ import com.tarento.upsmf.userManagement.model.Transaction; import com.tarento.upsmf.userManagement.services.PaymentService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.net.URISyntaxException; +import java.sql.SQLException; import java.util.List; import java.util.Map; @@ -103,4 +103,9 @@ public ResponseEntity> getAllTransactions() { public ResponseEntity getTransactionByUniqueRefNumber(@PathVariable String uniqueRefNumber) { return userHandler.getTransactionByUniqueRefNumber(uniqueRefNumber); } + + @GetMapping(value = "/attribute/{fieldName}/{fieldValue}/{offset}/{limit}", produces = "application/json") + public List getUserByAttribute(@PathVariable String fieldName, @PathVariable String fieldValue, @PathVariable int offset, @PathVariable int limit) throws SQLException { + return userHandler.getUserByAttribute(fieldName,fieldValue, offset, limit); + } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index d0f739a..c0ef73e 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.tarento.upsmf.userManagement.model.Payment; import com.tarento.upsmf.userManagement.model.Transaction; import com.tarento.upsmf.userManagement.services.UserService; import com.tarento.upsmf.userManagement.utility.*; @@ -16,6 +15,7 @@ import java.io.IOException; import java.net.URISyntaxException; +import java.sql.SQLException; import java.util.List; import java.util.Map; @@ -166,4 +166,9 @@ public ResponseEntity> getAllTransactions() { public ResponseEntity getTransactionByUniqueRefNumber(String uniqueRefNumber) { return userService.getTransactionByUniqueRefNumber(uniqueRefNumber); } + + public List getUserByAttribute(String fieldName, String fieldValue, int offset, int limit) throws SQLException { + logger.info("Fetching user info by field {} and value {} with offset {} and limit {}",fieldName, fieldValue, offset, limit); + return userService.getUserListByAttribute(fieldName,fieldValue, offset, limit); + } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/UserAttributeModel.java b/src/main/java/com/tarento/upsmf/userManagement/model/UserAttributeModel.java new file mode 100644 index 0000000..5a4e38e --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/model/UserAttributeModel.java @@ -0,0 +1,25 @@ +package com.tarento.upsmf.userManagement.model; + +import lombok.*; + +import javax.persistence.*; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +@ToString +@Entity +@Table(name = "user_attribute") +public class UserAttributeModel { + + @Column(name="name") + private String name; + @Column(name="value") + private String value; + @Column(name="user_id") + private String userId; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private String id; +} diff --git a/src/main/java/com/tarento/upsmf/userManagement/repository/UserAttributeRepository.java b/src/main/java/com/tarento/upsmf/userManagement/repository/UserAttributeRepository.java new file mode 100644 index 0000000..288df5f --- /dev/null +++ b/src/main/java/com/tarento/upsmf/userManagement/repository/UserAttributeRepository.java @@ -0,0 +1,15 @@ +package com.tarento.upsmf.userManagement.repository; + +import com.tarento.upsmf.userManagement.model.UserAttributeModel; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface UserAttributeRepository extends JpaRepository { + @Query(value = "SELECT * FROM user_attribute WHERE name=:fieldName and value=:fieldValue",nativeQuery = true) + List findUserByAttribute(@Param("fieldName") String fieldName, @Param("fieldValue") String fieldValue); +} diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index f431b65..8f2b709 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -2,13 +2,16 @@ import com.fasterxml.jackson.databind.JsonNode; import com.tarento.upsmf.userManagement.model.Transaction; +import com.tarento.upsmf.userManagement.model.UserAttributeModel; import com.tarento.upsmf.userManagement.repository.TransactionRepository; +import com.tarento.upsmf.userManagement.repository.UserAttributeRepository; import com.tarento.upsmf.userManagement.utility.KeycloakTokenRetriever; import com.tarento.upsmf.userManagement.utility.KeycloakUserCount; import com.tarento.upsmf.userManagement.utility.KeycloakUserCredentialPersister; import com.tarento.upsmf.userManagement.utility.SunbirdRCKeycloakTokenRetriever; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; +import org.keycloak.representations.idm.UserRepresentation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -16,6 +19,7 @@ import org.springframework.core.env.Environment; import org.springframework.http.*; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; @@ -24,9 +28,12 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; -import java.util.List; -import java.util.Map; -import java.util.Optional; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; +import java.util.stream.Collectors; @Component @PropertySource({ "classpath:application.properties" }) @@ -52,6 +59,12 @@ public class UserService { @Autowired private TransactionRepository transactionRepository; + @Autowired + private UserAttributeRepository userAttributeRepository; + + @Autowired + private JdbcTemplate jdbcTemplate; + @Autowired private KeycloakUserCount keycloakUserCount; @@ -59,6 +72,8 @@ public class UserService { private String BASE_URL; private String KEYCLOAK_BASEURL; + private Connection connection; + @PostConstruct public void init(){ environment = env; @@ -228,5 +243,85 @@ public ResponseEntity getTransactionByUniqueRefNumber(String unique return new ResponseEntity<>(transaction, HttpStatus.OK); } + public List getUserByAttribute(String fieldName, String fieldValue) { + return userAttributeRepository.findUserByAttribute(fieldName, fieldValue); + } + + public List getUserListByAttribute(String fieldName, String fieldValue, int offset, int limit) throws SQLException { + + List userByAttribute = getUserByAttribute(fieldName, fieldValue); + if(userByAttribute == null || userByAttribute.isEmpty()){ + logger.info("No records found."); + return Collections.EMPTY_LIST; + } + logger.info("Records found {}",userByAttribute); + List collect = userByAttribute.stream().map(UserAttributeModel::getUserId).collect(Collectors.toList()); + + Map userRepresentationMap = getStringUserRepresentationMap(collect, offset, limit); + if(userRepresentationMap.isEmpty()){ + logger.info("No UserRepresentation records found for {}",collect); + return Collections.EMPTY_LIST; + } + return new ArrayList<>(userRepresentationMap.values()); + } + + private Map getStringUserRepresentationMap(List collect, int offset, int limit) throws SQLException { + Connection connection = Objects.requireNonNull(jdbcTemplate.getDataSource()).getConnection(); + String formattedString = getFormattedStringFromCollection(collect, offset, limit); + Map userRepresentationMap = new HashMap<>(); + ResultSet resultSet = null; + PreparedStatement preparedStatement = null; + try { + preparedStatement = connection.prepareStatement(formattedString); + resultSet = preparedStatement.executeQuery(); + if (resultSet != null) { + while (resultSet.next()) { + String id = resultSet.getString("id"); + UserRepresentation userRepresentation = null; + if (userRepresentationMap.containsKey(id)) { + userRepresentation = userRepresentationMap.get(id); + userRepresentation.singleAttribute(resultSet.getString("name"), resultSet.getString("value")); + } else { + userRepresentation = new UserRepresentation(); + userRepresentation.setId(id); + userRepresentation.setUsername(resultSet.getString("username")); + userRepresentation.setEnabled(resultSet.getBoolean("enabled")); + userRepresentation.setEmail(resultSet.getString("email")); + userRepresentation.setFirstName(resultSet.getString("first_name")); + userRepresentation.setLastName(resultSet.getString("last_name")); + userRepresentation.singleAttribute(resultSet.getString("name"), resultSet.getString("value")); + userRepresentationMap.put(id, userRepresentation); + } + } + } + } catch (Exception exception){ + logger.error("Exception while processing data from DB.",exception); + } finally { + if(resultSet != null){ + resultSet.close(); + } + if(preparedStatement != null){ + preparedStatement.close(); + } + if(connection != null){ + connection.close(); + } + } + logger.info("userRepresentationMap {}",userRepresentationMap); + return userRepresentationMap; + } + + private String getFormattedStringFromCollection(List collect, int offset, int limit) { + StringBuffer sbf = new StringBuffer(); + sbf.append("select ue.*,ua.name,ua.value from user_entity ue join user_attribute ua on ua.user_id = ue.id WHERE ue.id IN ("); + collect.stream().forEach(item -> { + sbf.append("'" + item + "'"); + sbf.append(","); + }); + String substring = sbf.substring(0, sbf.lastIndexOf(",")); + substring = substring + (") OFFSET " + offset + " LIMIT " + limit); + logger.info("Query to be Executed {}",substring); + return substring; + } } \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index f787335..726da40 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -21,9 +21,9 @@ sunbirdRC.keycloak.adminToken.password =admin registration_payment_Gateway_EndPoint =https://registration.uphrh.in/payment-response affiliation_payment_Gateway_EndPoint =https://applicant.upsmfac.org/payment-response -spring.datasource.url=jdbc:postgresql://localhost:5432/frac_tool +spring.datasource.url=jdbc:postgresql://localhost:5432/registry spring.datasource.username=postgres -spring.datasource.password=postgres +spring.datasource.password=password spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true spring.jpa.show-sql=false From b6ed69eccfdddc39fba4e49ada4335a8a3a43836 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 14 Sep 2023 14:11:42 +0530 Subject: [PATCH 73/87] adding pagination feature to user details . --- .../repository/UserAttributeRepository.java | 5 +++-- .../userManagement/services/UserService.java | 16 ++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/repository/UserAttributeRepository.java b/src/main/java/com/tarento/upsmf/userManagement/repository/UserAttributeRepository.java index 288df5f..4bddafd 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/repository/UserAttributeRepository.java +++ b/src/main/java/com/tarento/upsmf/userManagement/repository/UserAttributeRepository.java @@ -10,6 +10,7 @@ @Repository public interface UserAttributeRepository extends JpaRepository { - @Query(value = "SELECT * FROM user_attribute WHERE name=:fieldName and value=:fieldValue",nativeQuery = true) - List findUserByAttribute(@Param("fieldName") String fieldName, @Param("fieldValue") String fieldValue); + @Query(value = "SELECT * FROM user_attribute WHERE name=:fieldName and value=:fieldValue OFFSET :offset LIMIT :limit",nativeQuery = true) + List findUserByAttribute(@Param("fieldName") String fieldName, @Param("fieldValue") String fieldValue, + @Param("offset") int offset, @Param("limit") int limit); } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 8f2b709..60f89ef 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -243,13 +243,13 @@ public ResponseEntity getTransactionByUniqueRefNumber(String unique return new ResponseEntity<>(transaction, HttpStatus.OK); } - public List getUserByAttribute(String fieldName, String fieldValue) { - return userAttributeRepository.findUserByAttribute(fieldName, fieldValue); + public List getUserByAttribute(String fieldName, String fieldValue, int offset, int limit) { + return userAttributeRepository.findUserByAttribute(fieldName, fieldValue,offset,limit); } public List getUserListByAttribute(String fieldName, String fieldValue, int offset, int limit) throws SQLException { - List userByAttribute = getUserByAttribute(fieldName, fieldValue); + List userByAttribute = getUserByAttribute(fieldName, fieldValue,offset,limit); if(userByAttribute == null || userByAttribute.isEmpty()){ logger.info("No records found."); return Collections.EMPTY_LIST; @@ -257,7 +257,7 @@ public List getUserListByAttribute(String fieldName, String fieldValue, int offs logger.info("Records found {}",userByAttribute); List collect = userByAttribute.stream().map(UserAttributeModel::getUserId).collect(Collectors.toList()); - Map userRepresentationMap = getStringUserRepresentationMap(collect, offset, limit); + Map userRepresentationMap = getStringUserRepresentationMap(collect); if(userRepresentationMap.isEmpty()){ logger.info("No UserRepresentation records found for {}",collect); return Collections.EMPTY_LIST; @@ -265,9 +265,9 @@ public List getUserListByAttribute(String fieldName, String fieldValue, int offs return new ArrayList<>(userRepresentationMap.values()); } - private Map getStringUserRepresentationMap(List collect, int offset, int limit) throws SQLException { + private Map getStringUserRepresentationMap(List collect) throws SQLException { Connection connection = Objects.requireNonNull(jdbcTemplate.getDataSource()).getConnection(); - String formattedString = getFormattedStringFromCollection(collect, offset, limit); + String formattedString = getFormattedStringFromCollection(collect); Map userRepresentationMap = new HashMap<>(); ResultSet resultSet = null; PreparedStatement preparedStatement = null; @@ -311,7 +311,7 @@ private Map getStringUserRepresentationMap(List collect, int offset, int limit) { + private String getFormattedStringFromCollection(List collect) { StringBuffer sbf = new StringBuffer(); sbf.append("select ue.*,ua.name,ua.value from user_entity ue join user_attribute ua on ua.user_id = ue.id WHERE ue.id IN ("); collect.stream().forEach(item -> { @@ -319,7 +319,7 @@ private String getFormattedStringFromCollection(List collect, int offset sbf.append(","); }); String substring = sbf.substring(0, sbf.lastIndexOf(",")); - substring = substring + (") OFFSET " + offset + " LIMIT " + limit); + substring = substring + (" )"); logger.info("Query to be Executed {}",substring); return substring; } From 6f9b1ae6c9c55e9b8ab83af6f3cc097bcee85480 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 14 Sep 2023 14:46:41 +0530 Subject: [PATCH 74/87] changing the http contract method . --- .../upsmf/userManagement/controller/UserController.java | 6 +++--- .../tarento/upsmf/userManagement/handler/UserHandler.java | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 86dfc8b..50729c7 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -104,8 +104,8 @@ public ResponseEntity getTransactionByUniqueRefNumber(@PathVariable String un return userHandler.getTransactionByUniqueRefNumber(uniqueRefNumber); } - @GetMapping(value = "/attribute/{fieldName}/{fieldValue}/{offset}/{limit}", produces = "application/json") - public List getUserByAttribute(@PathVariable String fieldName, @PathVariable String fieldValue, @PathVariable int offset, @PathVariable int limit) throws SQLException { - return userHandler.getUserByAttribute(fieldName,fieldValue, offset, limit); + @PostMapping(value = "/attribute", produces = "application/json") + public List getUserByAttribute(@RequestBody JsonNode body) throws SQLException { + return userHandler.getUserByAttribute(body); } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index c0ef73e..f46cbf2 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -167,7 +167,11 @@ public ResponseEntity getTransactionByUniqueRefNumber(String uniqueRefNumber) return userService.getTransactionByUniqueRefNumber(uniqueRefNumber); } - public List getUserByAttribute(String fieldName, String fieldValue, int offset, int limit) throws SQLException { + public List getUserByAttribute(JsonNode body) throws SQLException { + String fieldName = body.get("fieldName").asText(); + String fieldValue = body.get("fieldValue").asText(); + int offset = body.get("offset").asInt(); + int limit = body.get("limit").asInt(); logger.info("Fetching user info by field {} and value {} with offset {} and limit {}",fieldName, fieldValue, offset, limit); return userService.getUserListByAttribute(fieldName,fieldValue, offset, limit); } From 0d786d45556110f9128e39aa5d107419b1fb3eed Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 14 Sep 2023 18:16:03 +0530 Subject: [PATCH 75/87] moving this feature sunbird-rc . --- .../controller/UserController.java | 5 +- .../userManagement/handler/UserHandler.java | 9 +- .../model/UserAttributeModel.java | 25 ----- .../repository/UserAttributeRepository.java | 16 ---- .../userManagement/services/UserService.java | 93 ------------------- 5 files changed, 2 insertions(+), 146 deletions(-) delete mode 100644 src/main/java/com/tarento/upsmf/userManagement/model/UserAttributeModel.java delete mode 100644 src/main/java/com/tarento/upsmf/userManagement/repository/UserAttributeRepository.java diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index 50729c7..e7b0781 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -104,8 +104,5 @@ public ResponseEntity getTransactionByUniqueRefNumber(@PathVariable String un return userHandler.getTransactionByUniqueRefNumber(uniqueRefNumber); } - @PostMapping(value = "/attribute", produces = "application/json") - public List getUserByAttribute(@RequestBody JsonNode body) throws SQLException { - return userHandler.getUserByAttribute(body); - } + } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index f46cbf2..fa96839 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -167,12 +167,5 @@ public ResponseEntity getTransactionByUniqueRefNumber(String uniqueRefNumber) return userService.getTransactionByUniqueRefNumber(uniqueRefNumber); } - public List getUserByAttribute(JsonNode body) throws SQLException { - String fieldName = body.get("fieldName").asText(); - String fieldValue = body.get("fieldValue").asText(); - int offset = body.get("offset").asInt(); - int limit = body.get("limit").asInt(); - logger.info("Fetching user info by field {} and value {} with offset {} and limit {}",fieldName, fieldValue, offset, limit); - return userService.getUserListByAttribute(fieldName,fieldValue, offset, limit); - } + } diff --git a/src/main/java/com/tarento/upsmf/userManagement/model/UserAttributeModel.java b/src/main/java/com/tarento/upsmf/userManagement/model/UserAttributeModel.java deleted file mode 100644 index 5a4e38e..0000000 --- a/src/main/java/com/tarento/upsmf/userManagement/model/UserAttributeModel.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tarento.upsmf.userManagement.model; - -import lombok.*; - -import javax.persistence.*; - -@Data -@NoArgsConstructor -@AllArgsConstructor -@Builder -@ToString -@Entity -@Table(name = "user_attribute") -public class UserAttributeModel { - - @Column(name="name") - private String name; - @Column(name="value") - private String value; - @Column(name="user_id") - private String userId; - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private String id; -} diff --git a/src/main/java/com/tarento/upsmf/userManagement/repository/UserAttributeRepository.java b/src/main/java/com/tarento/upsmf/userManagement/repository/UserAttributeRepository.java deleted file mode 100644 index 4bddafd..0000000 --- a/src/main/java/com/tarento/upsmf/userManagement/repository/UserAttributeRepository.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.tarento.upsmf.userManagement.repository; - -import com.tarento.upsmf.userManagement.model.UserAttributeModel; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public interface UserAttributeRepository extends JpaRepository { - @Query(value = "SELECT * FROM user_attribute WHERE name=:fieldName and value=:fieldValue OFFSET :offset LIMIT :limit",nativeQuery = true) - List findUserByAttribute(@Param("fieldName") String fieldName, @Param("fieldValue") String fieldValue, - @Param("offset") int offset, @Param("limit") int limit); -} diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 60f89ef..87fdfa5 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -2,16 +2,13 @@ import com.fasterxml.jackson.databind.JsonNode; import com.tarento.upsmf.userManagement.model.Transaction; -import com.tarento.upsmf.userManagement.model.UserAttributeModel; import com.tarento.upsmf.userManagement.repository.TransactionRepository; -import com.tarento.upsmf.userManagement.repository.UserAttributeRepository; import com.tarento.upsmf.userManagement.utility.KeycloakTokenRetriever; import com.tarento.upsmf.userManagement.utility.KeycloakUserCount; import com.tarento.upsmf.userManagement.utility.KeycloakUserCredentialPersister; import com.tarento.upsmf.userManagement.utility.SunbirdRCKeycloakTokenRetriever; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; -import org.keycloak.representations.idm.UserRepresentation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,7 +16,6 @@ import org.springframework.core.env.Environment; import org.springframework.http.*; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; @@ -29,11 +25,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; import java.util.*; -import java.util.stream.Collectors; @Component @PropertySource({ "classpath:application.properties" }) @@ -59,12 +51,6 @@ public class UserService { @Autowired private TransactionRepository transactionRepository; - @Autowired - private UserAttributeRepository userAttributeRepository; - - @Autowired - private JdbcTemplate jdbcTemplate; - @Autowired private KeycloakUserCount keycloakUserCount; @@ -243,85 +229,6 @@ public ResponseEntity getTransactionByUniqueRefNumber(String unique return new ResponseEntity<>(transaction, HttpStatus.OK); } - public List getUserByAttribute(String fieldName, String fieldValue, int offset, int limit) { - return userAttributeRepository.findUserByAttribute(fieldName, fieldValue,offset,limit); - } - - public List getUserListByAttribute(String fieldName, String fieldValue, int offset, int limit) throws SQLException { - - List userByAttribute = getUserByAttribute(fieldName, fieldValue,offset,limit); - if(userByAttribute == null || userByAttribute.isEmpty()){ - logger.info("No records found."); - return Collections.EMPTY_LIST; - } - logger.info("Records found {}",userByAttribute); - List collect = userByAttribute.stream().map(UserAttributeModel::getUserId).collect(Collectors.toList()); - Map userRepresentationMap = getStringUserRepresentationMap(collect); - if(userRepresentationMap.isEmpty()){ - logger.info("No UserRepresentation records found for {}",collect); - return Collections.EMPTY_LIST; - } - return new ArrayList<>(userRepresentationMap.values()); - } - - private Map getStringUserRepresentationMap(List collect) throws SQLException { - Connection connection = Objects.requireNonNull(jdbcTemplate.getDataSource()).getConnection(); - String formattedString = getFormattedStringFromCollection(collect); - Map userRepresentationMap = new HashMap<>(); - ResultSet resultSet = null; - PreparedStatement preparedStatement = null; - try { - preparedStatement = connection.prepareStatement(formattedString); - resultSet = preparedStatement.executeQuery(); - if (resultSet != null) { - while (resultSet.next()) { - String id = resultSet.getString("id"); - UserRepresentation userRepresentation = null; - if (userRepresentationMap.containsKey(id)) { - userRepresentation = userRepresentationMap.get(id); - userRepresentation.singleAttribute(resultSet.getString("name"), resultSet.getString("value")); - } else { - userRepresentation = new UserRepresentation(); - userRepresentation.setId(id); - userRepresentation.setUsername(resultSet.getString("username")); - userRepresentation.setEnabled(resultSet.getBoolean("enabled")); - userRepresentation.setEmail(resultSet.getString("email")); - userRepresentation.setFirstName(resultSet.getString("first_name")); - userRepresentation.setLastName(resultSet.getString("last_name")); - userRepresentation.singleAttribute(resultSet.getString("name"), resultSet.getString("value")); - userRepresentationMap.put(id, userRepresentation); - } - } - } - } catch (Exception exception){ - logger.error("Exception while processing data from DB.",exception); - } finally { - if(resultSet != null){ - resultSet.close(); - } - if(preparedStatement != null){ - preparedStatement.close(); - } - if(connection != null){ - connection.close(); - } - } - logger.info("userRepresentationMap {}",userRepresentationMap); - return userRepresentationMap; - } - - private String getFormattedStringFromCollection(List collect) { - StringBuffer sbf = new StringBuffer(); - sbf.append("select ue.*,ua.name,ua.value from user_entity ue join user_attribute ua on ua.user_id = ue.id WHERE ue.id IN ("); - collect.stream().forEach(item -> { - sbf.append("'" + item + "'"); - sbf.append(","); - }); - String substring = sbf.substring(0, sbf.lastIndexOf(",")); - substring = substring + (" )"); - logger.info("Query to be Executed {}",substring); - return substring; - } } \ No newline at end of file From e87d26c16435f4ed2a12f5c925793e40f2e7af71 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 14 Sep 2023 18:18:07 +0530 Subject: [PATCH 76/87] reverting DB . --- src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 726da40..2208e44 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -21,7 +21,7 @@ sunbirdRC.keycloak.adminToken.password =admin registration_payment_Gateway_EndPoint =https://registration.uphrh.in/payment-response affiliation_payment_Gateway_EndPoint =https://applicant.upsmfac.org/payment-response -spring.datasource.url=jdbc:postgresql://localhost:5432/registry +spring.datasource.url=jdbc:postgresql://localhost:5432/frac_tool spring.datasource.username=postgres spring.datasource.password=password spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect From 6ce6c5a1fcc2c2c1b2425a8edbe064eb18f87790 Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 14 Sep 2023 19:58:08 +0530 Subject: [PATCH 77/87] adding endpoint to fetch user attribute . --- .../userManagement/controller/UserController.java | 5 ++++- .../upsmf/userManagement/handler/UserHandler.java | 4 +++- .../upsmf/userManagement/services/UserService.java | 11 ++++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java index e7b0781..b52c088 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java +++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java @@ -104,5 +104,8 @@ public ResponseEntity getTransactionByUniqueRefNumber(@PathVariable String un return userHandler.getTransactionByUniqueRefNumber(uniqueRefNumber); } - + @PostMapping(value = "/attribute", produces = "application/json") + public ResponseEntity getUserByAttribute(@RequestBody JsonNode body) throws SQLException, IOException, URISyntaxException { + return userHandler.getUserByAttribute(body); + } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java index fa96839..8fd7051 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java +++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java @@ -167,5 +167,7 @@ public ResponseEntity getTransactionByUniqueRefNumber(String uniqueRefNumber) return userService.getTransactionByUniqueRefNumber(uniqueRefNumber); } - + public ResponseEntity getUserByAttribute(JsonNode body) throws SQLException, IOException, URISyntaxException { + return userService.getUserListByAttribute(body); + } } diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java index 87fdfa5..a5b66b0 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java @@ -25,6 +25,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.sql.Connection; +import java.sql.SQLException; import java.util.*; @Component @@ -229,6 +230,14 @@ public ResponseEntity getTransactionByUniqueRefNumber(String unique return new ResponseEntity<>(transaction, HttpStatus.OK); } - + public ResponseEntity getUserListByAttribute(JsonNode body) throws SQLException, IOException, URISyntaxException { + logger.info("fetching user attribute for payload {} ", body.toPrettyString()); + RestTemplate restTemplate = new RestTemplate(); + URI uri = new URI(KEYCLOAK_BASEURL + "/user/attribute"); + HttpHeaders headerForKeycloak = getHeaderForKeycloak(); + HttpEntity httpEntity = new HttpEntity(body, headerForKeycloak); + ResponseEntity result = restTemplate.postForEntity(uri,httpEntity,String.class); + return result; + } } \ No newline at end of file From 0ee94c304ee5a099fb78a349626387830f84787c Mon Sep 17 00:00:00 2001 From: Shishir Suman Date: Fri, 6 Oct 2023 09:50:27 +0530 Subject: [PATCH 78/87] changes for updating fee --- .../services/impl/PaymentServiceImpl.java | 45 ++++++++++++++----- src/main/resources/application.properties | 2 + 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 2c32398..fd765bf 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -1,34 +1,29 @@ package com.tarento.upsmf.userManagement.services.impl; -import com.tarento.upsmf.userManagement.model.Payment; +import com.tarento.upsmf.userManagement.model.ResponseDto; import com.tarento.upsmf.userManagement.model.Transaction; -import com.tarento.upsmf.userManagement.repository.PaymentRepository; import com.tarento.upsmf.userManagement.repository.TransactionRepository; import com.tarento.upsmf.userManagement.services.PaymentService; -import org.apache.http.HttpResponse; -import org.apache.http.client.HttpClient; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; +import org.springframework.http.*; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; import javax.annotation.PostConstruct; -import java.io.IOException; import java.net.URI; -import java.net.URISyntaxException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; import java.util.regex.Pattern; @Service @@ -47,15 +42,22 @@ public class PaymentServiceImpl implements PaymentService { private String REGISTRATION_PAYMENT_GATEWAY_ENDPOINT; private String AFFILIATION_PAYMENT_GATEWAY_ENDPOINT; + private String EXAM_PAYMENT_GATEWAY_ENDPOINT; + private String FEE_STATUS_UPDATE_ENDPOINT; private String AES_KEY_FOR_PAYMENT_SUCCESS; + @Autowired + private RestTemplate restTemplate; + @PostConstruct public void init(){ environment = env; REGISTRATION_PAYMENT_GATEWAY_ENDPOINT = getPropertyValue("registration_payment_Gateway_EndPoint"); AFFILIATION_PAYMENT_GATEWAY_ENDPOINT = getPropertyValue("affiliation_payment_Gateway_EndPoint"); AES_KEY_FOR_PAYMENT_SUCCESS = getPropertyValue("aes_key_for_payment_success"); + EXAM_PAYMENT_GATEWAY_ENDPOINT = getPropertyValue("exam_payment_Gateway_EndPoint"); + FEE_STATUS_UPDATE_ENDPOINT = getPropertyValue("exam_fee_status_update_EndPoint"); } public static String getPropertyValue(String property){ @@ -76,6 +78,12 @@ public ResponseEntity makePayment(Map requestData) { strEndPoint = REGISTRATION_PAYMENT_GATEWAY_ENDPOINT; } else if (strings.contains("affiliation")) { strEndPoint = AFFILIATION_PAYMENT_GATEWAY_ENDPOINT; + } else if(strings.contains("exam")) { + strEndPoint = EXAM_PAYMENT_GATEWAY_ENDPOINT; + // update db for provided transaction id + // get ref no + String referenceNo = requestData.get("reference_no"); + updateStudentFeeStatus(referenceNo); } String responseString = "", transaction_status = ""; String transactionDetails = getTransactionDetails(requestData); @@ -100,6 +108,19 @@ public ResponseEntity makePayment(Map requestData) { return new ResponseEntity(null, httpHeaders, HttpStatus.NOT_FOUND); } + private void updateStudentFeeStatus(String referenceNo) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.APPLICATION_JSON); + // TODO check on this + //httpHeaders.setBearerAuth("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJSR3RkMkZzeG1EMnJER3I4dkJHZ0N6MVhyalhZUzBSSyJ9.kMLn6177rvY53i0RAN3SPD5m3ctwaLb32pMYQ65nBdA"); + HttpEntity entity = new HttpEntity(referenceNo, httpHeaders); + ResponseEntity responseEntity = restTemplate.postForObject(FEE_STATUS_UPDATE_ENDPOINT, entity, ResponseEntity.class); + logger.info("Update student fee status - {}", responseEntity); + if(responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) { + logger.info("Student Fee updated successfully"); + } + } + private String getTransactionDetails(Map requestData) { String transactionAmount = requestData.get("Transaction Amount") != null ? requestData.get("Transaction Amount") : ""; String uniqueRefNumber = requestData.get("Unique Ref Number") != null ? requestData.get("Unique Ref Number") : ""; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 2208e44..31029bf 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -20,6 +20,8 @@ sunbirdRC.keycloak.adminToken.clientSecret =QF5op6Hb3Y9mY1rU0IycdjmD7j3Bvzkh sunbirdRC.keycloak.adminToken.password =admin registration_payment_Gateway_EndPoint =https://registration.uphrh.in/payment-response affiliation_payment_Gateway_EndPoint =https://applicant.upsmfac.org/payment-response +exam_payment_Gateway_EndPoint =https://exam.uphrh.in/payment-response +exam_fee_status_update_EndPoint= spring.datasource.url=jdbc:postgresql://localhost:5432/frac_tool spring.datasource.username=postgres From 4e93eed1a57b75e4dcfc6f86d52c95f417c83576 Mon Sep 17 00:00:00 2001 From: Shishir Suman Date: Fri, 6 Oct 2023 10:00:23 +0530 Subject: [PATCH 79/87] changes for updating fee --- .../userManagement/services/impl/PaymentServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index fd765bf..b8e9cc1 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -80,9 +80,9 @@ public ResponseEntity makePayment(Map requestData) { strEndPoint = AFFILIATION_PAYMENT_GATEWAY_ENDPOINT; } else if(strings.contains("exam")) { strEndPoint = EXAM_PAYMENT_GATEWAY_ENDPOINT; - // update db for provided transaction id // get ref no - String referenceNo = requestData.get("reference_no"); + String referenceNo = requestData.get("ReferenceNo"); + // update db for provided transaction id updateStudentFeeStatus(referenceNo); } String responseString = "", transaction_status = ""; From 333286088913e816de8ae16468c472593ca7aefb Mon Sep 17 00:00:00 2001 From: Shishir Suman Date: Fri, 6 Oct 2023 10:08:19 +0530 Subject: [PATCH 80/87] changes for updating fee --- .../userManagement/services/impl/PaymentServiceImpl.java | 6 +++--- src/main/resources/application.properties | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index b8e9cc1..0fcc51d 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -44,7 +44,7 @@ public class PaymentServiceImpl implements PaymentService { private String AFFILIATION_PAYMENT_GATEWAY_ENDPOINT; private String EXAM_PAYMENT_GATEWAY_ENDPOINT; private String FEE_STATUS_UPDATE_ENDPOINT; - + private String EXAMS_AUTH_TOKEN; private String AES_KEY_FOR_PAYMENT_SUCCESS; @Autowired @@ -58,6 +58,7 @@ public void init(){ AES_KEY_FOR_PAYMENT_SUCCESS = getPropertyValue("aes_key_for_payment_success"); EXAM_PAYMENT_GATEWAY_ENDPOINT = getPropertyValue("exam_payment_Gateway_EndPoint"); FEE_STATUS_UPDATE_ENDPOINT = getPropertyValue("exam_fee_status_update_EndPoint"); + EXAMS_AUTH_TOKEN = getPropertyValue("exam_service_auth_token"); } public static String getPropertyValue(String property){ @@ -111,8 +112,7 @@ public ResponseEntity makePayment(Map requestData) { private void updateStudentFeeStatus(String referenceNo) { HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); - // TODO check on this - //httpHeaders.setBearerAuth("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJSR3RkMkZzeG1EMnJER3I4dkJHZ0N6MVhyalhZUzBSSyJ9.kMLn6177rvY53i0RAN3SPD5m3ctwaLb32pMYQ65nBdA"); + httpHeaders.setBearerAuth(EXAMS_AUTH_TOKEN); HttpEntity entity = new HttpEntity(referenceNo, httpHeaders); ResponseEntity responseEntity = restTemplate.postForObject(FEE_STATUS_UPDATE_ENDPOINT, entity, ResponseEntity.class); logger.info("Update student fee status - {}", responseEntity); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 31029bf..f1be2bd 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -22,6 +22,7 @@ registration_payment_Gateway_EndPoint =https://registration.uphrh.in/payment-res affiliation_payment_Gateway_EndPoint =https://applicant.upsmfac.org/payment-response exam_payment_Gateway_EndPoint =https://exam.uphrh.in/payment-response exam_fee_status_update_EndPoint= +exam_service_auth_token= spring.datasource.url=jdbc:postgresql://localhost:5432/frac_tool spring.datasource.username=postgres From 255fc774c6c43f9c6cd45843a0ec21a1b3b77d77 Mon Sep 17 00:00:00 2001 From: Shishir Suman Date: Wed, 11 Oct 2023 11:56:02 +0530 Subject: [PATCH 81/87] changes for updating fee --- .../upsmf/userManagement/UserManagementApplication.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/tarento/upsmf/userManagement/UserManagementApplication.java b/src/main/java/com/tarento/upsmf/userManagement/UserManagementApplication.java index 344938c..a19266c 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/UserManagementApplication.java +++ b/src/main/java/com/tarento/upsmf/userManagement/UserManagementApplication.java @@ -3,7 +3,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableJpaRepositories @@ -13,4 +15,8 @@ public static void main(String[] args) { SpringApplication.run(UserManagementApplication.class, args); } + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } } From eac33ce23042ab92587f5dc093775253db62b300 Mon Sep 17 00:00:00 2001 From: Shishir Suman Date: Wed, 11 Oct 2023 12:07:41 +0530 Subject: [PATCH 82/87] changes for updating fee --- .../upsmf/userManagement/services/impl/PaymentServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index 0fcc51d..afa3659 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -110,10 +110,12 @@ public ResponseEntity makePayment(Map requestData) { } private void updateStudentFeeStatus(String referenceNo) { + logger.info("updating student fee for ref - {}", referenceNo); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); httpHeaders.setBearerAuth(EXAMS_AUTH_TOKEN); HttpEntity entity = new HttpEntity(referenceNo, httpHeaders); + logger.info("exam url - {}", FEE_STATUS_UPDATE_ENDPOINT); ResponseEntity responseEntity = restTemplate.postForObject(FEE_STATUS_UPDATE_ENDPOINT, entity, ResponseEntity.class); logger.info("Update student fee status - {}", responseEntity); if(responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) { From dacbb8b0c5beb5b2ec56c32fcd8f0e83eb9a00e1 Mon Sep 17 00:00:00 2001 From: Shishir Suman Date: Wed, 11 Oct 2023 12:22:16 +0530 Subject: [PATCH 83/87] changes for adding module name --- .../upsmf/userManagement/services/impl/PaymentServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index afa3659..ce52a15 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -79,7 +79,7 @@ public ResponseEntity makePayment(Map requestData) { strEndPoint = REGISTRATION_PAYMENT_GATEWAY_ENDPOINT; } else if (strings.contains("affiliation")) { strEndPoint = AFFILIATION_PAYMENT_GATEWAY_ENDPOINT; - } else if(strings.contains("exam")) { + } else if(strings.contains("exam") || strings.contains("EXAM")) { strEndPoint = EXAM_PAYMENT_GATEWAY_ENDPOINT; // get ref no String referenceNo = requestData.get("ReferenceNo"); From 89cc00c1d9435a4556efb162b97a254c3c142b92 Mon Sep 17 00:00:00 2001 From: Shishir Suman <74050813+shishirsuman092@users.noreply.github.com> Date: Wed, 11 Oct 2023 14:07:57 +0530 Subject: [PATCH 84/87] Update PaymentServiceImpl.java --- .../userManagement/services/impl/PaymentServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index ce52a15..d47b977 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -113,7 +113,7 @@ private void updateStudentFeeStatus(String referenceNo) { logger.info("updating student fee for ref - {}", referenceNo); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_JSON); - httpHeaders.setBearerAuth(EXAMS_AUTH_TOKEN); + httpHeaders.set("x-authenticated-user-token", EXAMS_AUTH_TOKEN); HttpEntity entity = new HttpEntity(referenceNo, httpHeaders); logger.info("exam url - {}", FEE_STATUS_UPDATE_ENDPOINT); ResponseEntity responseEntity = restTemplate.postForObject(FEE_STATUS_UPDATE_ENDPOINT, entity, ResponseEntity.class); @@ -250,4 +250,4 @@ private String sha512Hash(String input) { return null; } } -} \ No newline at end of file +} From 7909ed6226ed991622a90322546f233a76ab58f1 Mon Sep 17 00:00:00 2001 From: Shishir Suman <74050813+shishirsuman092@users.noreply.github.com> Date: Wed, 11 Oct 2023 14:47:38 +0530 Subject: [PATCH 85/87] Handling deserialization issue --- .../services/impl/PaymentServiceImpl.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java index d47b977..a3ff229 100644 --- a/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java +++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java @@ -116,10 +116,14 @@ private void updateStudentFeeStatus(String referenceNo) { httpHeaders.set("x-authenticated-user-token", EXAMS_AUTH_TOKEN); HttpEntity entity = new HttpEntity(referenceNo, httpHeaders); logger.info("exam url - {}", FEE_STATUS_UPDATE_ENDPOINT); - ResponseEntity responseEntity = restTemplate.postForObject(FEE_STATUS_UPDATE_ENDPOINT, entity, ResponseEntity.class); - logger.info("Update student fee status - {}", responseEntity); - if(responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) { - logger.info("Student Fee updated successfully"); + try { + ResponseEntity responseEntity = restTemplate.postForObject(FEE_STATUS_UPDATE_ENDPOINT, entity, ResponseEntity.class); + logger.info("Update student fee status - {}", responseEntity); + if (responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) { + logger.info("Student Fee updated successfully"); + } + } catch (Exception e) { + logger.error("Error in processing request"); } } From 654df58bfe98034ef9403cb7c90e1c355141765f Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Thu, 27 Jun 2024 12:34:31 +0530 Subject: [PATCH 86/87] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 38 ++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..dd84ea7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. From b8603410db9555666cd1ad1e9a0687b0a7539fbb Mon Sep 17 00:00:00 2001 From: Mahesh Maney R Date: Tue, 20 Aug 2024 17:26:12 +0530 Subject: [PATCH 87/87] Create maven.yml --- .github/workflows/maven.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/maven.yml diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 0000000..06b6aa0 --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,35 @@ +# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Java CI with Maven + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + cache: maven + - name: Build with Maven + run: mvn -B package --file pom.xml + + # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive + - name: Update dependency graph + uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6