diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..ee77193
Binary files /dev/null and b/.DS_Store differ
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.
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
diff --git a/pom.xml b/pom.xml
index 4dee35b..d4b209a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,6 +82,44 @@
spring-boot-starter-json
2.5.6
+
+
+ org.keycloak
+ keycloak-admin-client
+ 21.1.2
+
+
+
+ org.keycloak
+ keycloak-core
+ 21.1.2
+
+
+
+ org.postgresql
+ postgresql
+ 42.2.20
+ runtime
+
+
+
+ jakarta.persistence
+ jakarta.persistence-api
+ 2.2.3
+
+
+
+ org.springframework.data
+ spring-data-jpa
+ 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..a19266c 100644
--- a/src/main/java/com/tarento/upsmf/userManagement/UserManagementApplication.java
+++ b/src/main/java/com/tarento/upsmf/userManagement/UserManagementApplication.java
@@ -1,12 +1,22 @@
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.context.annotation.Bean;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.web.client.RestTemplate;
@SpringBootApplication
+@EnableJpaRepositories
+@EnableAutoConfiguration
public class UserManagementApplication {
public static void main(String[] args) {
SpringApplication.run(UserManagementApplication.class, args);
}
+ @Bean
+ public RestTemplate restTemplate() {
+ return new RestTemplate();
+ }
}
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..b52c088 100644
--- a/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java
+++ b/src/main/java/com/tarento/upsmf/userManagement/controller/UserController.java
@@ -2,40 +2,110 @@
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.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;
-@RestController(value = "/api/v1/user)")
+@RestController
+@RequestMapping(value = "/api/v1/user")
public class UserController {
+ @Autowired
+ PaymentService paymentService;
+
@Autowired
private UserHandler userHandler;
@PostMapping(value = "/create", consumes = "application/json", produces = "application/json")
- public ResponseEntity createUser(@RequestBody final JsonNode body) throws URISyntaxException {
+ public String 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 String updateUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException {
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 = "/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 ResponseEntity listUser(@RequestBody final JsonNode body) throws URISyntaxException {
+ public String listUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException {
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 ResponseEntity activateUser(@RequestBody final JsonNode body) throws URISyntaxException {
+ 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 {
+ public String deactivateUser(@RequestBody final JsonNode body) throws URISyntaxException, IOException {
return userHandler.deactivateUser(body);
}
+
+ @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", consumes = "application/json", produces = "application/json")
+ 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, IOException {
+ return userHandler.login(body);
+ }
+
+ @PostMapping(value = "/payment", consumes = {"*/*"})
+ public ResponseEntity paymentRedirect(@RequestParam Map requestData) throws URISyntaxException, IOException {
+ return userHandler.paymentRedirect(requestData);
+ }
+
+ @PostMapping(value = "/keycloak/usrlogin")
+ 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);
+ }
+
+ @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);
+ }
+
+ @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 9172e44..8fd7051 100644
--- a/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java
+++ b/src/main/java/com/tarento/upsmf/userManagement/handler/UserHandler.java
@@ -1,36 +1,173 @@
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.Transaction;
import com.tarento.upsmf.userManagement.services.UserService;
+import com.tarento.upsmf.userManagement.utility.*;
+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.sql.SQLException;
+import java.util.List;
+import java.util.Map;
@Component
public class UserHandler {
+ private static final Logger logger = LoggerFactory.getLogger(UserHandler.class);
@Autowired
private UserService userService;
- public ResponseEntity createUser(final JsonNode body) throws URISyntaxException {
- return userService.createUser(body);
+ @Autowired
+ private KeycloakUserCreator keycloakUserCreator;
+
+ @Autowired
+ private KeycloakUserGetter keycloakUserGetter;
+
+ @Autowired
+ private KeycloakUserUpdater keycloakUserUpdater;
+
+ @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);
+ logger.info("user created ? {}", response);
+ try {
+ ResponseEntity user = userService.createUser(body);
+ logger.info("user created on ed {}",user);
+ user.toString();
+ } catch (Exception e){
+ //response = e.getLocalizedMessage();
+ logger.error("Error Occured",e);
+ }
+ return response;
}
- public ResponseEntity updateUser(final JsonNode body) throws URISyntaxException{
- return userService.updateUser(body);
+ public String updateUser(final JsonNode body) throws URISyntaxException, IOException {
+ JsonNode request = body.get("request");
+ 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 ResponseEntity listUser(final JsonNode body) throws URISyntaxException{
- return userService.listUser(body);
+ public String userDetails(final JsonNode body) throws IOException {
+ JsonNode request = body.get("request");
+ String userName = keycloakUserGetter.findUser(request.get("userName").asText(),0,0);
+ return userName;
}
- public ResponseEntity activateUser(final JsonNode body) throws URISyntaxException{
- return userService.activateUser(body);
+ 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 ResponseEntity deactivateUser(final JsonNode body) throws URISyntaxException{
- return userService.deactivateUser(body);
+
+ public String listUser(final JsonNode body) throws URISyntaxException, IOException {
+ logger.info("creating user with payload {} ", body.toPrettyString());
+ int offset = body.get("offset").asInt();
+ int size = body.get("size").asInt();
+ String users = keycloakUserGetter.findUser(null,offset,size);
+ 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 {
+ logger.info("activating user with payload {} ", body.toPrettyString());
+ JsonNode request = body.get("request");
+ String response = keycloakUserActivateDeActivate.activateDeactivatUser(request.get("userName").asText(), true);
+ try {
+ ResponseEntity jsonNodeResponseEntity = userService.activateUser(body);
+ }catch (Exception exception){
+ exception.printStackTrace();
+ }
+ return response;
}
+ public String deactivateUser(final JsonNode body) throws URISyntaxException, IOException {
+ logger.info("deactivating user with payload {} ", body.toPrettyString());
+
+ JsonNode request = body.get("request");
+ 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 {
+ 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, IOException {
+ logger.info("generating otp to {} ", email);
+ ResponseEntity stringResponseEntity = userService.generateOTP(email);
+ return stringResponseEntity;
+ }
+
+ public ResponseEntity login(final JsonNode body) throws URISyntaxException, IOException {
+ 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;
+ }
+
+ public ResponseEntity paymentRedirect(Map requestData)
+ throws URISyntaxException, IOException {
+ logger.info("payload from paymentRedirect {}", requestData);
+ return userService.paymentRedirect(requestData);
+ }
+
+ 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);
+ }
+ public ResponseEntity> getAllTransactions() {
+ return userService.getAllTransactions();
+ }
+
+ 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/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/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/model/Payment.java b/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java
new file mode 100644
index 0000000..9cf4869
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/model/Payment.java
@@ -0,0 +1,27 @@
+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.AUTO )
+ private String feeId;
+ private String fullName;
+ private String noOfExams;
+ private String 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/model/Transaction.java b/src/main/java/com/tarento/upsmf/userManagement/model/Transaction.java
new file mode 100644
index 0000000..fc08dc8
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/model/Transaction.java
@@ -0,0 +1,46 @@
+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;
+ private String transaction_status;
+
+}
diff --git a/src/main/java/com/tarento/upsmf/userManagement/repository/PaymentRepository.java b/src/main/java/com/tarento/upsmf/userManagement/repository/PaymentRepository.java
new file mode 100644
index 0000000..27bd50f
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/repository/PaymentRepository.java
@@ -0,0 +1,15 @@
+package com.tarento.upsmf.userManagement.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
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..f79305e
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/repository/TransactionRepository.java
@@ -0,0 +1,8 @@
+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 {
+ Transaction findByUniqueRefNumber(String uniqueRefNumber);
+}
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..e068821
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/services/PaymentService.java
@@ -0,0 +1,15 @@
+package com.tarento.upsmf.userManagement.services;
+
+import com.tarento.upsmf.userManagement.model.Payment;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.Map;
+
+
+@Service
+public interface PaymentService {
+ 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 a96e004..a5b66b0 100644
--- a/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java
+++ b/src/main/java/com/tarento/upsmf/userManagement/services/UserService.java
@@ -1,58 +1,115 @@
package com.tarento.upsmf.userManagement.services;
import com.fasterxml.jackson.databind.JsonNode;
+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;
import org.apache.http.impl.client.HttpClientBuilder;
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.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.*;
@Component
+@PropertySource({ "classpath:application.properties" })
public class UserService {
-
private static final Logger logger = LoggerFactory.getLogger(UserService.class);
@Autowired
private Environment env;
+ @Autowired
+ private KeycloakTokenRetriever keycloakTokenRetriever;
+
+ @Autowired
+ private SunbirdRCKeycloakTokenRetriever sunbirdRCKeycloakTokenRetriever;
+
+ @Autowired
+ private PaymentService paymentService;
+
+ @Autowired
+ private KeycloakUserCredentialPersister keycloakUserCredentialPersister;
+
+ @Autowired
+ private TransactionRepository transactionRepository;
+
+ @Autowired
+ private KeycloakUserCount keycloakUserCount;
+
+ private static Environment environment;
+ private String BASE_URL;
+ private String KEYCLOAK_BASEURL;
+
+ private Connection connection;
+
+ @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 = "https://uphrh.in/api";
private HttpHeaders getHeader(){
- System.out.println(env.getProperty("BaseURL"));
- 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");
+ 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);
+ return headers;
+ }
+
+ private HttpHeaders getHeaderForKeycloak() throws IOException {
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ JsonNode adminToken = sunbirdRCKeycloakTokenRetriever.getAdminToken();
+ String authToken = adminToken.get("access_token").asText();
+ 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...");
- URI uri = new URI(BASE_URL + "/user/v1/sso/create");
+ logger.info("Creating user...{} ", body.toPrettyString());
+ 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);
return result;
}
+
public ResponseEntity updateUser(final JsonNode body) throws URISyntaxException {
- logger.info("Updating user...");
+ 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);
@@ -60,9 +117,8 @@ public ResponseEntity updateUser(final JsonNode body) throws URISyntax
return result;
}
-
public ResponseEntity listUser(final JsonNode body) throws URISyntaxException{
- logger.info("Listing users...");
+ logger.info("listUser user...{} ", body.toPrettyString());
RestTemplate restTemplate = new RestTemplate();
URI uri = new URI(BASE_URL + "/user/v1/search");
HttpHeaders headers = getHeader();
@@ -71,8 +127,12 @@ 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("Activating user...");
+ logger.info("activateUser user...{} ", body.toPrettyString());
RestTemplate restTemplate = new RestTemplate();
URI uri = new URI(BASE_URL + "/user/v1/unblock");
HttpHeaders headers = getHeader();
@@ -82,7 +142,7 @@ public ResponseEntity activateUser(final JsonNode body) throws URISynt
}
public ResponseEntity deactivateUser(final JsonNode body) throws URISyntaxException {
- logger.info("Deactivating user...");
+ logger.info("deactivateUser user...{} ", body.toPrettyString());
RestTemplate restTemplate = new RestTemplate();
URI uri = new URI(BASE_URL + "/user/v1/block");
HttpHeaders headers = getHeader();
@@ -90,4 +150,94 @@ public ResponseEntity deactivateUser(final JsonNode body) throws URISy
ResponseEntity result = restTemplate.postForEntity(uri,httpEntity,JsonNode.class);
return result;
}
-}
+
+ 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("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";
+ String response = "Y";
+
+ 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;
+ }
+
+ 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, 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);
+ return result;
+ }
+
+ public ResponseEntity paymentRedirect(Map requestData) throws URISyntaxException, IOException {
+ return paymentService.makePayment(requestData);
+ }
+
+ public String usrLogin(JsonNode body) throws IOException {
+ logger.info("login user with body {}",body);
+ return keycloakUserCredentialPersister.usrLogin(body);
+ }
+
+ 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);
+ }
+
+ 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
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..a3ff229
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/services/impl/PaymentServiceImpl.java
@@ -0,0 +1,257 @@
+package com.tarento.upsmf.userManagement.services.impl;
+
+import com.tarento.upsmf.userManagement.model.ResponseDto;
+import com.tarento.upsmf.userManagement.model.Transaction;
+import com.tarento.upsmf.userManagement.repository.TransactionRepository;
+import com.tarento.upsmf.userManagement.services.PaymentService;
+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.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.PostConstruct;
+import java.net.URI;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+@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
+ TransactionRepository repository;
+
+ 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 EXAMS_AUTH_TOKEN;
+ 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");
+ EXAMS_AUTH_TOKEN = getPropertyValue("exam_service_auth_token");
+ }
+
+ public static String getPropertyValue(String property){
+ return environment.getProperty(property);
+ }
+
+ @Override
+ public ResponseEntity makePayment(Map requestData) {
+ logger.info("payment details...{} ", requestData);
+ org.springframework.http.HttpHeaders httpHeaders = new org.springframework.http.HttpHeaders();
+ 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);
+ String strEndPoint = "";
+ if (strings.contains("registration")) {
+ strEndPoint = REGISTRATION_PAYMENT_GATEWAY_ENDPOINT;
+ } else if (strings.contains("affiliation")) {
+ strEndPoint = AFFILIATION_PAYMENT_GATEWAY_ENDPOINT;
+ } else if(strings.contains("exam") || strings.contains("EXAM")) {
+ strEndPoint = EXAM_PAYMENT_GATEWAY_ENDPOINT;
+ // get ref no
+ String referenceNo = requestData.get("ReferenceNo");
+ // update db for provided transaction id
+ updateStudentFeeStatus(referenceNo);
+ }
+ 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" + transactionDetails;
+ transaction_status = "success";
+ logger.info("Payment is successful.");
+ logger.info("Record saved to DB.");
+ } else {
+ responseString = strEndPoint + "?resp=failure" + transactionDetails;
+ transaction_status = "failed.";
+ logger.info("Payment failed.");
+ }
+ 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 void updateStudentFeeStatus(String referenceNo) {
+ logger.info("updating student fee for ref - {}", referenceNo);
+ HttpHeaders httpHeaders = new HttpHeaders();
+ httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+ httpHeaders.set("x-authenticated-user-token", EXAMS_AUTH_TOKEN);
+ HttpEntity entity = new HttpEntity(referenceNo, httpHeaders);
+ logger.info("exam url - {}", FEE_STATUS_UPDATE_ENDPOINT);
+ 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");
+ }
+ }
+
+ 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 = -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;
+ try {
+ String date = requestData.get("Transaction Date") != null ? requestData.get("Transaction Date") : "";
+ DateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
+ if(!date.isBlank()) {
+ 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");
+ 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;
+ }
+ }
+}
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..89af786
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakTokenRetriever.java
@@ -0,0 +1,78 @@
+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 = getPropertyValue("adminToken.endPoint");
+ ADMIN_TOKEN_SECRET = getPropertyValue("adminToken.clientSecret");
+ ADMIN_USERNAME = getPropertyValue("adminToken.userName");
+ ADMIN_PASSWORD = getPropertyValue("adminToken.password");
+ }
+
+ 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);
+ 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;
+ 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());
+ 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..2edc46b
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserActivateDeActivate.java
@@ -0,0 +1,70 @@
+package com.tarento.upsmf.userManagement.utility;
+
+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;
+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 = getPropertyValue("keycloak.user.baseURL");
+ }
+
+ 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 activated ? : {} 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);
+ StatusLine statusLine = response.getStatusLine();
+
+ String responseBody = statusLine.getStatusCode() + " " + statusLine.getReasonPhrase();
+ return responseBody;
+ }
+}
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
new file mode 100644
index 0000000..5292c7d
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCreator.java
@@ -0,0 +1,103 @@
+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;
+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;
+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.Arrays;
+import java.util.Optional;
+import java.util.UUID;
+
+@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;
+
+ @Autowired
+ private KeycloakUserCredentialPersister keycloakUserCredentialPersister;
+
+ private static Environment environment;
+
+ private String KEYCLOAK_USER_BASE_URL;
+
+ private ObjectMapper mapper = new ObjectMapper();
+
+ @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 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();
+ 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");
+ 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);
+ logger.info("Response from httpClient call : {}", response);
+ String responseBody = EntityUtils.toString(response.getEntity());
+ 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 {
+ 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){
+ logger.error("error occurred.",ex);
+ }
+ }
+ 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..b995451
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserCredentialPersister.java
@@ -0,0 +1,130 @@
+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;
+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;
+
+ @Autowired
+ private SunbirdRCKeycloakTokenRetriever sunbirdRCKeycloakTokenRetriever;
+
+ private static Environment environment;
+
+ 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;
+ 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 {}",REGISTRY_ENDPOINT_SAVE_USERINFO);
+ HttpClient httpClient = HttpClients.createDefault();
+ 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");
+ httpPost.setHeader(HttpHeaders.AUTHORIZATION, "Bearer " + authToken);
+ String requestBody = "{" +
+ "\"username\": " + "\"" + userName + "\"" + "," +
+ "\"password\": " + "\"" + password + "\"" +
+ "}";
+ 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);
+ logger.info("Response from server {}",response);
+ 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/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..543b27d
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserGetter.java
@@ -0,0 +1,110 @@
+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;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+@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 = getPropertyValue("keycloak.user.baseURL");
+ }
+
+ public static String getPropertyValue(String property){
+ return environment.getProperty(property);
+ }
+ 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);
+ 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;
+ }
+
+ 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 ) {
+ 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);
+ 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);
+ logger.info("url to be hit {} ",httpGet.toString());
+ String responseBody = EntityUtils.toString(response.getEntity());
+ logger.info("ResponseBody {}", responseBody);
+ return responseBody;
+ }
+ 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/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..a8fad0d
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/utility/KeycloakUserUpdater.java
@@ -0,0 +1,88 @@
+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;
+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 KeycloakUserUpdater {
+
+ @Autowired
+ private Environment env;
+
+ @Autowired
+ 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;
+ KEYCLOAK_USER_BASE_URL = getPropertyValue("keycloak.user.baseURL");
+ }
+
+ public static String getPropertyValue(String property){
+ return environment.getProperty(property);
+ }
+
+ 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 + "/" + 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");
+ logger.info("Request body: {}", requestBody);
+ 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) {
+ 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())) {
+ 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);
+ }
+ }
+ responseBody = " Status 200. User updated successfully.";
+ } else {
+ responseBody = "Failed to update user." + responseBody;
+ }
+ return responseBody;
+ }
+}
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..3dc2c01
--- /dev/null
+++ b/src/main/java/com/tarento/upsmf/userManagement/utility/SunbirdRCKeycloakTokenRetriever.java
@@ -0,0 +1,98 @@
+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.password");
+ }
+
+ 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);
+
+ String requestBody = "username=" + ADMIN_USERNAME +
+ "&grant_type=client_credentials" +
+ "&client_id=" + ADMIN_CLIENTID +
+ "&client_secret=" + ADMIN_TOKEN_SECRET;
+
+ 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 httpEntity = response.getEntity();
+ String responseBody = EntityUtils.toString(httpEntity, 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 a3558a9..f1be2bd 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,5 +1,38 @@
-server.port = 5299
-AuthorizationToken =
-x-authenticated-user-token =
+server.port = 5298
+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 = 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
+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=
+exam_service_auth_token=
+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
+spring.jpa.properties.hibernate.format_sql=true
+spring.jpa.show-sql=false
+spring.jpa.hibernate.ddl-auto=none
+
+otp.mail.endpoint = /api/v1/keycloak/mail/sendOTP
+user.create.mail.endpoint =/api/v1/keycloak/mail/userCreate
+user.login =/api/v1/login
+aes_key_for_payment_success =XXXXXXXXXXXXXXXXX
\ No newline at end of file
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
-
-
-
-
-
-
-
-
-