From 5835625ed0704cf068fb70c4e569043b6a1da727 Mon Sep 17 00:00:00 2001 From: rcmasey <110193524+rcmasey@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:45:51 -0500 Subject: [PATCH 01/12] Delete oauth_AuthCode/src/test directory --- .../com/ups/client/DemoApplicationTests.java | 21 --- .../controller/ClientControllerTest.java | 112 ------------- .../client/service/ClientServiceImplTest.java | 153 ------------------ .../src/test/resources/application.properties | 14 -- 4 files changed, 300 deletions(-) delete mode 100644 oauth_AuthCode/src/test/java/com/ups/client/DemoApplicationTests.java delete mode 100644 oauth_AuthCode/src/test/java/com/ups/oauth/client/controller/ClientControllerTest.java delete mode 100644 oauth_AuthCode/src/test/java/com/ups/oauth/client/service/ClientServiceImplTest.java delete mode 100644 oauth_AuthCode/src/test/resources/application.properties diff --git a/oauth_AuthCode/src/test/java/com/ups/client/DemoApplicationTests.java b/oauth_AuthCode/src/test/java/com/ups/client/DemoApplicationTests.java deleted file mode 100644 index 0be8ad8..0000000 --- a/oauth_AuthCode/src/test/java/com/ups/client/DemoApplicationTests.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.ups.client; - -import com.ups.oauth.client.AuthCodeApplication; -import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.SpringBootConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - - -@SpringBootConfiguration -@SpringBootTest() -class DemoApplicationTests { - - @Test - void contextLoads() { - } - - - -} diff --git a/oauth_AuthCode/src/test/java/com/ups/oauth/client/controller/ClientControllerTest.java b/oauth_AuthCode/src/test/java/com/ups/oauth/client/controller/ClientControllerTest.java deleted file mode 100644 index bfe9b2d..0000000 --- a/oauth_AuthCode/src/test/java/com/ups/oauth/client/controller/ClientControllerTest.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.ups.oauth.client.controller; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.ups.oauth.client.dto.AuthTokenResponce; -import com.ups.oauth.client.dto.LassoRedirectModel; -import com.ups.oauth.client.service.ClientService; -import org.junit.jupiter.api.Test; - - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultActions; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.*; - -import static org.hamcrest.CoreMatchers.is; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.BDDMockito.*; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; - -@WebMvcTest -class ClientControllerTest { - - @Autowired - private MockMvc mockMvc; - - - @Autowired - private ObjectMapper objectMapper; - - @MockBean - ClientService clientService; - - - @Test - void genToken() { - AuthTokenResponce authTokenResponce= new AuthTokenResponce(); - authTokenResponce.setAccess_token("abc TOKEN"); - String code ="X8y7tazW-U2FsdGVkX19ZzhmzZQytDydbxHqx1XqBM6akXoyerEIb6Ec+2aEY5TsIONi3E2pJj8N5P6/O6Xf4Ph36M+wlgw=="; - given(clientService.genToken(code)).willReturn(authTokenResponce); - try { - ResultActions response = mockMvc.perform(get("/client/generate-token?code=X8y7tazW-U2FsdGVkX19ZzhmzZQytDydbxHqx1XqBM6akXoyerEIb6Ec+2aEY5TsIONi3E2pJj8N5P6/O6Xf4Ph36M+wlgw==") - //.contentType(MediaType.APPLICATION_JSON) - ); - - response.andExpect(status().isOk()) - .andDo(print()) - .andExpect(jsonPath("$.access_token", is(authTokenResponce.getAccess_token()))); - } catch (Exception e) { - throw new RuntimeException(e); - } - - } - - @Test - void getValidateClient() { - - String client_id ="test client_id"; - String redirect_uri = "test redirect_uri"; - LassoRedirectModel lassoRedirectModel = new LassoRedirectModel(); - lassoRedirectModel.setLassoRedirectURL("https://www.ups.com/lasso/signin?client_id=QUlFrHA9NXwmXUKz48QT9MJhaAizkdeXDiAYcGWtsVFYbJRJ&redirect_uri=https://www.ups.com&response_type=code&scope=read&&type=ups_com_api"); - given(clientService.getValidateClient(client_id,redirect_uri)).willReturn(lassoRedirectModel); - try { - ResultActions response = mockMvc.perform(get("/client/validate-client") - .param("client_id",client_id) - .param("redirect_uri",redirect_uri) - ); - - response.andExpect(status().isOk()) - .andDo(print()) - .andExpect(jsonPath("$.lassoRedirectURL", is(lassoRedirectModel.getLassoRedirectURL()))); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test - void refreshToken() { - MultiValueMap paramMap = new LinkedMultiValueMap<>(); - String token = "any token test"; - List list = new ArrayList<>(); - list.add(token); - AuthTokenResponce authTokenResponce= new AuthTokenResponce(); - authTokenResponce.setAccess_token("abc"); - paramMap.addAll("refresh_token",list); - given(clientService.refreshToken(token)).willReturn(authTokenResponce); - try { - ResultActions response = mockMvc.perform(post("/client/refresh-token") - .contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE) - .params(paramMap) - ); - - response.andExpect(status().isOk()) - .andDo(print()) - .andExpect(jsonPath("$.access_token", is(authTokenResponce.getAccess_token()))); - } catch (Exception e) { - throw new RuntimeException(e); - } - - } -} \ No newline at end of file diff --git a/oauth_AuthCode/src/test/java/com/ups/oauth/client/service/ClientServiceImplTest.java b/oauth_AuthCode/src/test/java/com/ups/oauth/client/service/ClientServiceImplTest.java deleted file mode 100644 index 211b760..0000000 --- a/oauth_AuthCode/src/test/java/com/ups/oauth/client/service/ClientServiceImplTest.java +++ /dev/null @@ -1,153 +0,0 @@ -package com.ups.oauth.client.service; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.ups.oauth.client.dto.AuthTokenResponce; -import com.ups.oauth.client.dto.LassoRedirectModel; -import com.ups.oauth.client.dto.ValidateClientResponse; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.mockito.*; -import static org.junit.Assert.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringBootConfiguration; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.*; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.util.ReflectionTestUtils; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.client.RestTemplate; - - -import java.util.Base64; -import java.util.HashMap; -import java.util.Map; - -import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo; - - -@SpringBootTest() -class ClientServiceImplTest { - - @Autowired - private ObjectMapper objectMapper; - - @Mock - private RestTemplate restTemplate = new RestTemplate(); - - @InjectMocks - private ClientService clientService = new ClientServiceImpl(); - - - @BeforeEach - void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - ReflectionTestUtils.setField(clientService, "clientId", "test client_id"); - ReflectionTestUtils.setField(clientService, "secretId", "test secret_id"); - ReflectionTestUtils.setField(clientService, "tokenUrl", "https://onlinetools.ups.com/security/v1/oauth/token"); - ReflectionTestUtils.setField(clientService, "validateClientUrl", "https://onlinetools.ups.com/security/v1/oauth/validate-client"); - ReflectionTestUtils.setField(clientService, "refreshUrl", "https://onlinetools.ups.com/security/v1/oauth/refresh"); - ReflectionTestUtils.setField(clientService, "redirectUrl", "https://www.ups.com"); - - } - @Test - void getValidateClient() throws JsonProcessingException { - - HttpHeaders headers = new HttpHeaders(); - - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - HttpEntity entity = new HttpEntity<>(headers); - Map params = new HashMap(); - String client_id ="test client_id"; - String redirect_uri = "https://www.ups.com"; - params.put("client_id", client_id); - params.put("redirect_uri", redirect_uri); - String finalValidateClientUrl = "https://onlinetools.ups.com/security/v1/oauth/validate-client" + "?client_id=" + client_id + - "&redirect_uri="+redirect_uri; - ValidateClientResponse validateClientResponse = new ValidateClientResponse(); - validateClientResponse.setResult("success"); - validateClientResponse.setLassoRedirectURL("https://www.ups.com/lasso/signin"); - validateClientResponse.setType("ups_com_api"); - - ResponseEntity res = new ResponseEntity(validateClientResponse, HttpStatus.OK); - Mockito - .when(restTemplate.exchange( - finalValidateClientUrl, HttpMethod.GET,entity,ValidateClientResponse.class,params)) - .thenReturn(res); - ValidateClientResponse validateClientResponse1= res.getBody(); - LassoRedirectModel resSedrvice = clientService.getValidateClient(client_id,redirect_uri); - String callbackURL = validateClientResponse.getLassoRedirectURL() + "?client_id=" + client_id + "&redirect_uri=" + redirect_uri - + "&response_type=code&scope=read&&type=" + validateClientResponse.getType(); - assertEquals(validateClientResponse.getResult(),validateClientResponse1.getResult()); - assertEquals(validateClientResponse.getType(),validateClientResponse1.getType()); - assertEquals(validateClientResponse.getLassoRedirectURL(),validateClientResponse1.getLassoRedirectURL()); - assertEquals(callbackURL,resSedrvice.getLassoRedirectURL()); - - } - - @Test - void genToken() { - String client_id ="test client_id"; - String authStr = "test client_id" + ":" + "test secret_id"; - String base64Creds = Base64.getEncoder().encodeToString(authStr.getBytes()); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - headers.add("Authorization", "Basic " + base64Creds); - MultiValueMap map = new LinkedMultiValueMap<>(); - map.add("grant_type", "authorization_code"); - map.add("code", "abc Code"); - map.add("redirect_uri", "https://www.ups.com"); - HttpEntity> entity = new HttpEntity<>(map, headers); - String tokenUrl = "https://onlinetools.ups.com/security/v1/oauth/token"; - AuthTokenResponce authTokenResponce = new AuthTokenResponce(); - authTokenResponce.setAccess_token("test abc token"); - authTokenResponce.setClient_id("test"); - authTokenResponce.setIssued_at("test"); - authTokenResponce.setToken_type("test"); - authTokenResponce.setExpires_in("test"); - authTokenResponce.setStatus("test"); - authTokenResponce.setScope("test"); - authTokenResponce.setRefresh_token("test"); - authTokenResponce.setRefresh_token_status("test"); - authTokenResponce.setRefresh_token_expires_in("test"); - authTokenResponce.setRefresh_count("test"); - authTokenResponce.setRefresh_token_issued_at("test"); - - ResponseEntity res = new ResponseEntity(authTokenResponce, HttpStatus.OK); - Mockito - .when(restTemplate.postForEntity( - tokenUrl,entity,AuthTokenResponce.class)) - .thenReturn(res); - - AuthTokenResponce token = clientService.genToken("abc Code"); - assertEquals(token.getAccess_token(),authTokenResponce.getAccess_token()); - - } - - @Test - void refreshToken() { - String authStr = "test client_id" + ":" + "test secret_id"; - String base64Creds = Base64.getEncoder().encodeToString(authStr.getBytes()); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - headers.add("Authorization", "Basic " + base64Creds); - MultiValueMap map = new LinkedMultiValueMap<>(); - map.add("grant_type", "refresh_token"); - map.add("refresh_token", "test refresh toekn"); - HttpEntity> entity = new HttpEntity<>(map, headers); - String refreshUrl = "https://onlinetools.ups.com/security/v1/oauth/refresh"; - AuthTokenResponce authTokenResponce = new AuthTokenResponce(); - authTokenResponce.setAccess_token("test refresh token response"); - ResponseEntity res = new ResponseEntity(authTokenResponce, HttpStatus.OK); - Mockito - .when(restTemplate.postForEntity( - refreshUrl,entity,AuthTokenResponce.class)) - .thenReturn(res); - - AuthTokenResponce token = clientService.refreshToken("test refresh toekn"); - assertEquals(token.getAccess_token(),authTokenResponce.getAccess_token()); - } -} \ No newline at end of file diff --git a/oauth_AuthCode/src/test/resources/application.properties b/oauth_AuthCode/src/test/resources/application.properties deleted file mode 100644 index 9f35678..0000000 --- a/oauth_AuthCode/src/test/resources/application.properties +++ /dev/null @@ -1,14 +0,0 @@ -server.port=9999 -# Customer Integration Environment Url (cie) -api.base.url=https://wwwcie.ups.com/ - -# Production Environment Url -#api.base.url=https://onlinetools.ups.com/ -token.api.url =${api.base.url}/security/v1/oauth/token -token.api.client = -token.api.secrete = -api.valid.client.url=${api.base.url}security/v1/oauth/validate-client - -refresh.api.url =${api.base.url}/security/v1/oauth/refresh - -redirect.url=https://www.ups.com \ No newline at end of file From f7ad5f7d6516590d6c9eeba9fda39e112e552996 Mon Sep 17 00:00:00 2001 From: rcmasey <110193524+rcmasey@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:46:30 -0500 Subject: [PATCH 02/12] Delete oauth_AuthCode/src/main/java/com/ups/oauth/client/controller directory --- .../client/controller/ClientController.java | 60 ------------------- 1 file changed, 60 deletions(-) delete mode 100644 oauth_AuthCode/src/main/java/com/ups/oauth/client/controller/ClientController.java diff --git a/oauth_AuthCode/src/main/java/com/ups/oauth/client/controller/ClientController.java b/oauth_AuthCode/src/main/java/com/ups/oauth/client/controller/ClientController.java deleted file mode 100644 index 50890e9..0000000 --- a/oauth_AuthCode/src/main/java/com/ups/oauth/client/controller/ClientController.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.ups.oauth.client.controller; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.MultiValueMap; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import com.ups.oauth.client.dto.AuthTokenResponce; -import com.ups.oauth.client.dto.LassoRedirectModel; -import com.ups.oauth.client.service.ClientService; - -@RestController -@RequestMapping("client") -public class ClientController { - - private static final Logger log = LoggerFactory.getLogger(ClientController.class); - - @Autowired - ClientService clientService; - - private String refreshToken ="refresh_token"; - - @GetMapping(value = "/generate-token") - public AuthTokenResponce genToken(@RequestParam(name = "code") String code) { - AuthTokenResponce token =null; - token = clientService.genToken(code); - - return token; - } - - @GetMapping(value = "/validate-client") - public LassoRedirectModel getValidateClient(@RequestParam(name = "client_id") String clientId, - @RequestParam(name = "redirect_uri") String redirectUri) { - - log.info("clint id is : {} and redirect Url is :-{}", clientId, redirectUri); - LassoRedirectModel lasso =null; - lasso = clientService.getValidateClient(clientId, redirectUri); - - return lasso; - } - - @PostMapping(value = "/refresh-token", consumes = "application/x-www-form-urlencoded") - public AuthTokenResponce refreshToken(@RequestBody MultiValueMap paramMap) { - AuthTokenResponce newToken = null; - if (paramMap.containsKey(refreshToken) && null != paramMap.get(refreshToken).get(0)) { - String token = paramMap.get(refreshToken).get(0); - log.info("refresh token :-{}", token); - newToken = clientService.refreshToken(token); - } - return newToken; - - } - -} From 937c104530e0e83ee6a8469cc9545b80e2336459 Mon Sep 17 00:00:00 2001 From: rcmasey <110193524+rcmasey@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:46:50 -0500 Subject: [PATCH 03/12] Delete oauth_AuthCode/src/main/java/com/ups/oauth/client/service directory --- .../oauth/client/service/ClientService.java | 16 --- .../client/service/ClientServiceImpl.java | 125 ------------------ 2 files changed, 141 deletions(-) delete mode 100644 oauth_AuthCode/src/main/java/com/ups/oauth/client/service/ClientService.java delete mode 100644 oauth_AuthCode/src/main/java/com/ups/oauth/client/service/ClientServiceImpl.java diff --git a/oauth_AuthCode/src/main/java/com/ups/oauth/client/service/ClientService.java b/oauth_AuthCode/src/main/java/com/ups/oauth/client/service/ClientService.java deleted file mode 100644 index 6b51924..0000000 --- a/oauth_AuthCode/src/main/java/com/ups/oauth/client/service/ClientService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.ups.oauth.client.service; - -import org.springframework.stereotype.Service; - -import com.ups.oauth.client.dto.AuthTokenResponce; -import com.ups.oauth.client.dto.LassoRedirectModel; - -@Service -public interface ClientService { - - public AuthTokenResponce genToken(String code); - - public LassoRedirectModel getValidateClient( String clientId, String redirectUri); - - public AuthTokenResponce refreshToken(String token); -} diff --git a/oauth_AuthCode/src/main/java/com/ups/oauth/client/service/ClientServiceImpl.java b/oauth_AuthCode/src/main/java/com/ups/oauth/client/service/ClientServiceImpl.java deleted file mode 100644 index b90e615..0000000 --- a/oauth_AuthCode/src/main/java/com/ups/oauth/client/service/ClientServiceImpl.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.ups.oauth.client.service; - -import java.util.Base64; -import java.util.HashMap; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.client.RestTemplate; - -import com.ups.oauth.client.dto.AuthTokenResponce; -import com.ups.oauth.client.dto.LassoRedirectModel; -import com.ups.oauth.client.dto.ValidateClientResponse; - -@Service -public class ClientServiceImpl implements ClientService { - - private static final Logger log = LoggerFactory.getLogger(ClientServiceImpl.class); - - @Autowired - private RestTemplate restTemplate; - - @Value("${token.api.url}") - private String tokenUrl; - - @Value("${token.api.client}") - private String clientId; - - @Value("${token.api.secrete}") - private String secretId; - - @Value("${api.valid.client.url}") - private String validateClientUrl; - - @Value("${refresh.api.url}") - private String refreshUrl; - - @Value("${redirect.url}") - private String redirectUrl; - - @Override - /** - * validate client and prepare redirect url - */ - public LassoRedirectModel getValidateClient(String clientId, String redirectUri) { - - HttpHeaders headers = new HttpHeaders(); - - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - HttpEntity entity = new HttpEntity<>(headers); - Map params = new HashMap<>(); - params.put("client_id", clientId); - params.put("redirect_uri", redirectUri); - - String finalValidateClientUrl = validateClientUrl + "?client_id=" + clientId + "&redirect_uri=" + redirectUri; - - log.info("url client validation api :- {}", finalValidateClientUrl); - ResponseEntity res = restTemplate.exchange(finalValidateClientUrl, HttpMethod.GET, - entity, ValidateClientResponse.class, params); - String callbackURL =null; - - ValidateClientResponse validateClient = res.getBody(); - - if(null != validateClient && null != validateClient.getLassoRedirectURL() && null !=validateClient.getType()) { - callbackURL = validateClient.getLassoRedirectURL() + "?client_id=" + clientId + "&redirect_uri=" - + redirectUri + "&response_type=code&scope=read&&type=" + validateClient.getType(); - - } - LassoRedirectModel lassoRedirectModel = new LassoRedirectModel(); - lassoRedirectModel.setLassoRedirectURL(callbackURL); - return lassoRedirectModel; - - } - - @Override - /** - * this method used for generate auth code base JWT token - */ - public AuthTokenResponce genToken(String code) { - - String authStr = clientId + ":" + secretId; - String base64Creds = Base64.getEncoder().encodeToString(authStr.getBytes()); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - headers.add("Authorization", "Basic " + base64Creds); - MultiValueMap map = new LinkedMultiValueMap<>(); - map.add("grant_type", "authorization_code"); - map.add("code", code); - map.add("redirect_uri", redirectUrl); - HttpEntity> entity = new HttpEntity<>(map, headers); - ResponseEntity res = restTemplate.postForEntity(tokenUrl, entity, AuthTokenResponce.class); - return res.getBody(); - - } - - @Override - /** - * this method used for generate JWT token based on refresh token - */ - public AuthTokenResponce refreshToken(String token) { - - String authStr = clientId + ":" + secretId; - String base64Creds = Base64.getEncoder().encodeToString(authStr.getBytes()); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - headers.add("Authorization", "Basic " + base64Creds); - MultiValueMap map = new LinkedMultiValueMap<>(); - map.add("grant_type", "refresh_token"); - map.add("refresh_token", token); - HttpEntity> entity = new HttpEntity<>(map, headers); - ResponseEntity res = restTemplate.postForEntity(refreshUrl, entity, AuthTokenResponce.class); - return res.getBody(); - } - -} From 5d681da239a7fb087de1e5a37a378ccec975de90 Mon Sep 17 00:00:00 2001 From: rcmasey <110193524+rcmasey@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:48:22 -0500 Subject: [PATCH 04/12] Create AuthorizeClientResponse.java --- .../client/dto/AuthorizeClientResponse.java | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/AuthorizeClientResponse.java diff --git a/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/AuthorizeClientResponse.java b/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/AuthorizeClientResponse.java new file mode 100644 index 0000000..7479730 --- /dev/null +++ b/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/AuthorizeClientResponse.java @@ -0,0 +1,86 @@ +package com.ups.oauth.client.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class AuthorizeClientResponse { + + private String location; + private String appname; + private String displayname; + + private static final Logger log = LoggerFactory.getLogger(AuthorizeClientResponse.class); + + + public AuthorizeClientResponse ( String location, String appname, String displayname) + { + this.location = location; + this.appname = appname; + this.displayname = displayname; + } + + public String getLocation() { + String response = ""; + int start = location.indexOf("["); + int end = location.indexOf("]"); + if (start != -1 && end != -1) + { + response = location.substring(start + 1, end); + } + return response; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getAppname() { + String response = ""; + int start = appname.indexOf("["); + int end = appname.indexOf("]"); + if (start != -1 && end != -1) + { + response = appname.substring(start + 1, end); + } + return response; + } + + public void setAppname(String appname) { + this.appname = appname; + } + + public String getDisplayname() { + String response = ""; + + int start = displayname.indexOf("["); + int end = displayname.indexOf("]"); + if (start != -1 && end != -1) + { + response = displayname.substring(start + 1, end); + } + return response; + } + + public void setDisplayname(String displayname) { + this.displayname = displayname; + } + + public String toString() + { + String response = ""; + String url = getLocation(); + if (url.equalsIgnoreCase("https://www.ups.com/error.page")) + { + response = url; + } + else + { + System.out.println("toString valid page page "); + response = System.lineSeparator() + "location = " + getLocation() + System.lineSeparator() + "appname = " + getAppname() + System.lineSeparator() + "displayname = " + getDisplayname(); + } + return response; + } + + +} From ab2d6b9049bfe944cf645c1b8e26b581e527d03f Mon Sep 17 00:00:00 2001 From: rcmasey <110193524+rcmasey@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:51:09 -0500 Subject: [PATCH 05/12] Delete oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/LassoRedirectModel.java --- .../ups/oauth/client/dto/LassoRedirectModel.java | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/LassoRedirectModel.java diff --git a/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/LassoRedirectModel.java b/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/LassoRedirectModel.java deleted file mode 100644 index a6ec6d6..0000000 --- a/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/LassoRedirectModel.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.ups.oauth.client.dto; - -public class LassoRedirectModel { - - private String lassoRedirectURL; - - public String getLassoRedirectURL() { - return lassoRedirectURL; - } - - public void setLassoRedirectURL(String lassoRedirectURL) { - this.lassoRedirectURL = lassoRedirectURL; - } - -} From fd38864cee97e6ca9bea33d84986aad1e5c723f3 Mon Sep 17 00:00:00 2001 From: rcmasey <110193524+rcmasey@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:12:01 -0500 Subject: [PATCH 06/12] Delete oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/ValidateClientResponse.java --- .../client/dto/ValidateClientResponse.java | 36 ------------------- 1 file changed, 36 deletions(-) delete mode 100644 oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/ValidateClientResponse.java diff --git a/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/ValidateClientResponse.java b/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/ValidateClientResponse.java deleted file mode 100644 index 1e99435..0000000 --- a/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/ValidateClientResponse.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.ups.oauth.client.dto; - -import com.fasterxml.jackson.annotation.JsonProperty; - -public class ValidateClientResponse { - - private String result; - private String type; - private String lassoRedirectURL; - - public String getResult() { - return result; - } - - public void setResult(String result) { - this.result = result; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getLassoRedirectURL() { - return lassoRedirectURL; - } - - @JsonProperty(value = "LassoRedirectURL") - public void setLassoRedirectURL(String lassoRedirectURL) { - this.lassoRedirectURL = lassoRedirectURL; - } - -} From 70cf5d62d180cfabe67428796c96a74f7532009f Mon Sep 17 00:00:00 2001 From: rcmasey <110193524+rcmasey@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:12:43 -0500 Subject: [PATCH 07/12] Update AuthTokenResponce.jav --- .../ups/oauth/client/dto/AuthTokenResponce.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/AuthTokenResponce.java b/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/AuthTokenResponce.java index a9cd062..25180da 100644 --- a/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/AuthTokenResponce.java +++ b/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/AuthTokenResponce.java @@ -114,5 +114,20 @@ public String getRefresh_token_issued_at() { public void setRefresh_token_issued_at(String refresh_token_issued_at) { this.refresh_token_issued_at = refresh_token_issued_at; } - + + public String toString() + { + return System.lineSeparator() + "token_type = " + getToken_type() + + System.lineSeparator() + "issued_at = " + getIssued_at() + + System.lineSeparator() + "client_id = " + getClient_id() + + System.lineSeparator() + "access_token = " + getAccess_token() + + System.lineSeparator() + "scope = " + getScope() + + System.lineSeparator() + "expires_in = " + getExpires_in() + + System.lineSeparator() + "refresh_count = " + getRefresh_count() + + System.lineSeparator() + "refresh_token_expires_in = " + getRefresh_token_expires_in() + + System.lineSeparator() + "refresh_token_status = " + getRefresh_token_status() + + System.lineSeparator() + "refresh_token = " + getRefresh_token() + + System.lineSeparator() + "refresh_token_issued_at = " + getRefresh_token_issued_at(); + + } } From 28a0e9f989b79cf2b0b308ad38ea162b01baff84 Mon Sep 17 00:00:00 2001 From: rcmasey <110193524+rcmasey@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:15:18 -0500 Subject: [PATCH 08/12] Add files via upload --- .../com/ups/oauth/client/app/AppConfig.java | 56 ++++ .../ups/oauth/client/app/AuthCodeDemo.java | 261 ++++++++++++++++++ 2 files changed, 317 insertions(+) create mode 100644 oauth_AuthCode/src/main/java/com/ups/oauth/client/app/AppConfig.java create mode 100644 oauth_AuthCode/src/main/java/com/ups/oauth/client/app/AuthCodeDemo.java diff --git a/oauth_AuthCode/src/main/java/com/ups/oauth/client/app/AppConfig.java b/oauth_AuthCode/src/main/java/com/ups/oauth/client/app/AppConfig.java new file mode 100644 index 0000000..32dc73f --- /dev/null +++ b/oauth_AuthCode/src/main/java/com/ups/oauth/client/app/AppConfig.java @@ -0,0 +1,56 @@ +package com.ups.oauth.client.app; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.context.annotation.Configuration; +import lombok.Getter; + +@Configuration +@Getter +public class AppConfig { + + @Value("${token.api.url}") + private String tokenUrl; + + @Value("${token.api.client}") + private String clientId; + + @Value("${token.api.secret}") + private String secretId; + + @Value("${api.valid.client.url}") + private String validateClientUrl; + + @Value("${refresh.api.url}") + private String refreshUrl; + + @Value("${redirect.url}") + private String redirectUrl; + + @Value("${api.response_type}") + private String code; + + @Value("${api.type}") + private String type; + + @Value("${api.scope}") + private String scope; + + @Value("${api.state}") + private String state; + + @Value("${api.base.url}") + private String upsurl; + + @Value("${api.valid.client.url}") + private String authorizeUrl; + + +/* + @Bean + public RestTemplate restTemplate(RestTemplateBuilder builder) { + final SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + return builder.requestFactory(() -> factory).build(); + } +*/ +} diff --git a/oauth_AuthCode/src/main/java/com/ups/oauth/client/app/AuthCodeDemo.java b/oauth_AuthCode/src/main/java/com/ups/oauth/client/app/AuthCodeDemo.java new file mode 100644 index 0000000..9519d46 --- /dev/null +++ b/oauth_AuthCode/src/main/java/com/ups/oauth/client/app/AuthCodeDemo.java @@ -0,0 +1,261 @@ +package com.ups.oauth.client.app; + +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import com.ups.oauth.client.dto.AuthTokenResponce; +import com.ups.oauth.client.dto.AuthorizeClientResponse; +import com.ups.oauth.client.dto.ErrorResponse; +import org.springframework.boot.CommandLineRunner; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.ups.oauth.client.app.AppConfig; + + +@Service +public class AuthCodeDemo implements CommandLineRunner { + + private static final Logger log = LoggerFactory.getLogger(AuthCodeDemo.class); + + @Autowired + private AppConfig appConfig; + + int methodCase = 1; + String method = ""; + String variable = ""; + + @Override + public void run(String... args) throws Exception { + + log.info("AuthCodeDemo::run"); + try { + method = args[0]; + variable = args[1]; + methodCase = Integer.valueOf(method); + + log.info("AuthCodeDemo::run:method = " + method); + log.info("AuthCodeDemo::run:variable = " + variable); + + + }catch (Exception e) { + log.info("Using default (Authorize Client)"); + methodCase = 1; + } + + switch (methodCase) { + case 1: + authorizeClient(appConfig.getClientId(), appConfig.getRedirectUrl()); + break; + + case 2: + genToken(variable); + break; + + case 3: + refreshToken(variable); + break; + } + System.exit(0); + } + + + + + /** + * validate client and prepare redirect url + */ + public void authorizeClient(String clientId, String redirectUri) { + + log.info("AuthCodeDemo::run:authorizeClient"); + + // getUUID(); + + + AuthorizeClientResponse authorizeClientResponse = null; + try { + HttpClient httpClient = HttpClient.newBuilder().build(); + HashMap params = new HashMap<>(); + params.put("client_id", appConfig.getClientId()); + params.put("redirect_uri", appConfig.getRedirectUrl()); + params.put("response_type", appConfig.getCode()); + params.put("state", appConfig.getState()); + params.put("scope", appConfig.getScope()); + + String finalValidateClientUrl = appConfig.getAuthorizeUrl() + "?client_id=" + appConfig.getClientId() + "&redirect_uri=" + + URLEncoder.encode(appConfig.getRedirectUrl(), StandardCharsets.UTF_8) + "&response_type=code" + "&state=" + appConfig.getState() + + "&scope=" + appConfig.getScope(); + + HttpRequest request = HttpRequest.newBuilder().uri(URI.create(finalValidateClientUrl)) + .header("Content-Type", "application/x-www-form-urlencoded") + .build(); + + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + + java.net.http.HttpHeaders headers = response.headers(); + + int status = response.statusCode(); + log.info("AuthCodeDemo::authorizeClient:status = " + status); + + if (status == 302) { + authorizeClientResponse = new AuthorizeClientResponse(headers.firstValue​("location").toString(), + headers.firstValue​("appname").toString(), headers.firstValue​("displayname").toString()); + if (authorizeClientResponse.getLocation().equalsIgnoreCase("https://www.ups.com/error.page")) + { + log.info("Authorize client is not available at this time, please try again later."); + log.info(authorizeClientResponse.getLocation()); + } + else { + log.info(authorizeClientResponse.toString()); + } + } else if (status == 400 || status == 401) { + ErrorResponse errorResponse = new ErrorResponse(response.statusCode(), + headers.firstValue​("errorcode").toString(), + headers.firstValue​("errordescription").toString()); + } else { + log.info("status = " + status); + log.info("Authorize client is not available at this time, please try again later."); + } + + + } catch (Exception e) { + log.info("Authorize client is not available at this time, please try again later."); + } + } + + + /** + * this method used for generate auth code base JWT token + */ + public void genToken(String code) { + + log.info("AuthCodeDemo::run:genToken"); + + var httpClient = HttpClient.newBuilder().build(); + String authStr = appConfig.getClientId() + ":" + appConfig.getSecretId(); + String base64Creds = Base64.getEncoder().encodeToString(authStr.getBytes()); + + HashMap params = new HashMap<>(); + params.put("grant_type", "authorization_code"); + params.put("code", code); + params.put("redirect_uri", appConfig.getRedirectUrl()); + + String query = params.keySet().stream() + .map(key -> key + "=" + URLEncoder.encode(params.get(key), StandardCharsets.UTF_8)) + .collect(Collectors.joining("&")); + + HttpRequest request = HttpRequest.newBuilder() + .POST(HttpRequest.BodyPublishers.ofString(query)) + .uri(URI.create(appConfig.getTokenUrl())) + .header("Content-Type", "application/x-www-form-urlencoded") + .header("x-merchant-id", "") + .header("Authorization", "Basic " + base64Creds) + .build(); + + try { + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + int status = response.statusCode(); + if (status == 200) { + ObjectMapper mapper = new ObjectMapper(); + AuthTokenResponce authTokenResponce = mapper.readValue(response.body(), AuthTokenResponce.class); + log.info("authTokenResponce = " + authTokenResponce.toString()); + } else if (status == 400 || status == 401 || status == 403 || status == 429) { + String err = response.body(); + ErrorResponse errorResponse = new ErrorResponse(status, err.substring(err.indexOf("\":[{\"code\":\"") + 12, err.indexOf("\",\"")), err.substring(err.indexOf(",\"message\":\"") + 12, err.indexOf("\"}]}"))); + log.info(errorResponse.toString()); + + } else { + log.info("status = " + status); + log.info("Generate token is not available at this time, please try again later."); + } + } catch (Exception e) { + log.info("Generate token is not available at this time, please try again later."); + } + } + + /** + * this method used for generate JWT token based on refresh token + */ + public void refreshToken(String token) { + + log.info("AuthCodeDemo::run:refreshToken"); + + var httpClient = HttpClient.newBuilder().build(); + String authStr = appConfig.getClientId() + ":" + appConfig.getSecretId(); + String base64Creds = Base64.getEncoder().encodeToString(authStr.getBytes()); + HashMap params = new HashMap<>(); + params.put("grant_type", "refresh_token"); + params.put("refresh_token", token); + + String form = params.keySet().stream() + .map(key -> key + "=" + URLEncoder.encode(params.get(key), StandardCharsets.UTF_8)) + .collect(Collectors.joining("&")); + + HttpRequest request = HttpRequest.newBuilder() + .POST(HttpRequest.BodyPublishers.ofString(form)) + .uri(URI.create(appConfig.getRefreshUrl())) + .header("Content-Type", "application/x-www-form-urlencoded") + .header("Authorization", "Basic " + base64Creds) + .build(); + + try { + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + int status = response.statusCode(); + if (status == 200) { + ObjectMapper mapper = new ObjectMapper(); + AuthTokenResponce authTokenResponce = mapper.readValue(response.body(), AuthTokenResponce.class); + log.info("authTokenResponce = " + authTokenResponce.toString()); + } else if (status == 400 || status == 401 || status == 403 || status == 429) { + String err = response.body(); + ErrorResponse errorResponse = new ErrorResponse(status, err.substring(err.indexOf("\":[{\"code\":\"") + 12, err.indexOf("\",\"")), err.substring(err.indexOf(",\"message\":\"") + 12, err.indexOf("\"}]}"))); + log.info(errorResponse.toString()); + } else { + log.info("status = " + status); + log.info ("Refresh token is not available at this time, please try again later."); + } + } catch (Exception e) { + log.info ("Refresh token is not available at this time, please try again later."); + } + } + + ////////////////////////////////////////// +public void getUUID() { + + + log.info("AuthCodeDemo::run:getUUID"); + + var httpClient = HttpClient.newBuilder().build(); + String authStr = appConfig.getClientId() + ":" + appConfig.getSecretId(); + String base64Creds = Base64.getEncoder().encodeToString(authStr.getBytes()); + + HttpRequest request = HttpRequest.newBuilder(). + uri(URI.create("https://onlinetoolss.ups.com/profile/v1/siteidentifier/GG")) + .header("Content-Type", "application/x-www-form-urlencoded") + .header("Accept", "application/x-www-form-urlencoded") + .header("transactionId", "testing") + .header("transactionSrc", "gg") + .header("userName", "upswwedev") + .header("Password", "Password1@") + .build(); + + try { + HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + log.info("getUUID Respone = " + response.toString()); + + + + } catch (Exception e) { + e.printStackTrace(); + log.info ("getUUID token is not available at this time, please try again later."); + } + } + + + + + ///////////////////////////////////////// +} + + From 9fbdf26cbc746ac8a96c117f25d931f75e80f08c Mon Sep 17 00:00:00 2001 From: rcmasey <110193524+rcmasey@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:32:06 -0500 Subject: [PATCH 09/12] Update application.properties --- oauth_AuthCode/src/main/resources/application.properties | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/oauth_AuthCode/src/main/resources/application.properties b/oauth_AuthCode/src/main/resources/application.properties index c111966..2891c90 100644 --- a/oauth_AuthCode/src/main/resources/application.properties +++ b/oauth_AuthCode/src/main/resources/application.properties @@ -1,4 +1,3 @@ -server.port=9999 # Customer Integration Environment Url (cie) api.base.url=https://wwwcie.ups.com/ @@ -13,4 +12,8 @@ api.valid.client.url=${api.base.url}security/v1/oauth/validate-client refresh.api.url =${api.base.url}/security/v1/oauth/refresh -redirect.url=https://www.ups.com +redirect.url= +api.response_type=code +api.type=ups_com_api +api.scope=read +api.state=test From a6d8f938c2ccdc14d0e90aa87a1bbae7277cd861 Mon Sep 17 00:00:00 2001 From: rcmasey <110193524+rcmasey@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:32:47 -0500 Subject: [PATCH 10/12] Update AuthCodeApplication.java --- .../com/ups/oauth/client/AuthCodeApplication.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/oauth_AuthCode/src/main/java/com/ups/oauth/client/AuthCodeApplication.java b/oauth_AuthCode/src/main/java/com/ups/oauth/client/AuthCodeApplication.java index a71dec6..ffc77ab 100644 --- a/oauth_AuthCode/src/main/java/com/ups/oauth/client/AuthCodeApplication.java +++ b/oauth_AuthCode/src/main/java/com/ups/oauth/client/AuthCodeApplication.java @@ -2,19 +2,15 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.web.client.RestTemplate; + @SpringBootApplication public class AuthCodeApplication { - public static void main(String[] args) { + public static void main(String[] args) { + SpringApplication.run(AuthCodeApplication.class, args); } - @Bean - public RestTemplate getRestTemplate() { - return new RestTemplate(); - } - } + From 85444542f3b03d2298d54b71f760f8083cf41d1d Mon Sep 17 00:00:00 2001 From: rcmasey <110193524+rcmasey@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:35:51 -0500 Subject: [PATCH 11/12] Update AuthCodeDemo.java --- .../ups/oauth/client/app/AuthCodeDemo.java | 43 +------------------ 1 file changed, 1 insertion(+), 42 deletions(-) diff --git a/oauth_AuthCode/src/main/java/com/ups/oauth/client/app/AuthCodeDemo.java b/oauth_AuthCode/src/main/java/com/ups/oauth/client/app/AuthCodeDemo.java index 9519d46..eec4860 100644 --- a/oauth_AuthCode/src/main/java/com/ups/oauth/client/app/AuthCodeDemo.java +++ b/oauth_AuthCode/src/main/java/com/ups/oauth/client/app/AuthCodeDemo.java @@ -69,11 +69,7 @@ public void run(String... args) throws Exception { */ public void authorizeClient(String clientId, String redirectUri) { - log.info("AuthCodeDemo::run:authorizeClient"); - - // getUUID(); - - + log.info("AuthCodeDemo::run:authorizeClient"); AuthorizeClientResponse authorizeClientResponse = null; try { HttpClient httpClient = HttpClient.newBuilder().build(); @@ -219,43 +215,6 @@ public void refreshToken(String token) { log.info ("Refresh token is not available at this time, please try again later."); } } - - ////////////////////////////////////////// -public void getUUID() { - - - log.info("AuthCodeDemo::run:getUUID"); - - var httpClient = HttpClient.newBuilder().build(); - String authStr = appConfig.getClientId() + ":" + appConfig.getSecretId(); - String base64Creds = Base64.getEncoder().encodeToString(authStr.getBytes()); - - HttpRequest request = HttpRequest.newBuilder(). - uri(URI.create("https://onlinetoolss.ups.com/profile/v1/siteidentifier/GG")) - .header("Content-Type", "application/x-www-form-urlencoded") - .header("Accept", "application/x-www-form-urlencoded") - .header("transactionId", "testing") - .header("transactionSrc", "gg") - .header("userName", "upswwedev") - .header("Password", "Password1@") - .build(); - - try { - HttpResponse response = httpClient.send(request, HttpResponse.BodyHandlers.ofString()); - log.info("getUUID Respone = " + response.toString()); - - - - } catch (Exception e) { - e.printStackTrace(); - log.info ("getUUID token is not available at this time, please try again later."); - } - } - - - - - ///////////////////////////////////////// } From 3f869c30c621bf34dfa6623b5590e85033f7c1c4 Mon Sep 17 00:00:00 2001 From: rcmasey <110193524+rcmasey@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:45:55 -0500 Subject: [PATCH 12/12] Create ErrorResponse.java --- .../ups/oauth/client/dto/ErrorResponse.java | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/ErrorResponse.java diff --git a/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/ErrorResponse.java b/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/ErrorResponse.java new file mode 100644 index 0000000..081fb3c --- /dev/null +++ b/oauth_AuthCode/src/main/java/com/ups/oauth/client/dto/ErrorResponse.java @@ -0,0 +1,67 @@ +package com.ups.oauth.client.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class ErrorResponse { + + public ErrorResponse (int httpStatus, String errorCode, String errorDescription) + { + this.httpStatus = httpStatus; + this.errorCode = errorCode; + this.errorDescription = errorDescription; + } + + + + private int httpStatus; + private String errorCode; + private String errorDescription; + + public int getHttpStatus() { + return httpStatus; + } + + public void setHttpStatus(int httpStatus) { + this.httpStatus = httpStatus; + } + + public String getErrorCode() { + String response = errorCode; + + int start = errorCode.indexOf("["); + int end = errorCode.indexOf("]"); + if (start != -1 && end != -1) + { + response = errorCode.substring(start + 1, end); + } + return response; + } + + public void setErrorCode(String errorCode) { + this.errorCode = errorCode; + } + + public String getErrorDescription() { + String response = errorDescription; + int start = errorDescription.indexOf("["); + int end = errorDescription.indexOf("]"); + if (start != -1 && end != -1) + { + response = errorDescription.substring(start + 1, end); + } + return response; + } + + public void setErrorDescription(String errorDescription) { + this.errorDescription = errorDescription; + } + + + public String toString() + { + return System.lineSeparator() + "HttpStatus = " + getHttpStatus() + System.lineSeparator() + "Error = " + getErrorCode() + System.lineSeparator() + "Error Description = " + getErrorDescription(); + } + +}