Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

}

Original file line number Diff line number Diff line change
@@ -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();
}
*/
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
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");
AuthorizeClientResponse authorizeClientResponse = null;
try {
HttpClient httpClient = HttpClient.newBuilder().build();
HashMap<String, String> 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<String> 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<String, String> 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<String> 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<String, String> 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<String> 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.");
}
}
}


This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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();

}
}
Loading