diff --git a/ingress-proxy/src/main/java/com/networknt/proxy/salesforce/SalesforceConfig.java b/ingress-proxy/src/main/java/com/networknt/proxy/salesforce/SalesforceConfig.java index 145aca09ae..a26fba501c 100644 --- a/ingress-proxy/src/main/java/com/networknt/proxy/salesforce/SalesforceConfig.java +++ b/ingress-proxy/src/main/java/com/networknt/proxy/salesforce/SalesforceConfig.java @@ -2,52 +2,60 @@ import com.networknt.config.Config; import com.networknt.config.ConfigException; +import com.networknt.config.JsonMapper; +import io.undertow.server.handlers.PathTemplateHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; public class SalesforceConfig { + private static final Logger logger = LoggerFactory.getLogger(SalesforceConfig.class); + public static final String CONFIG_NAME = "salesforce"; - private static final String ENABLED = "enabled"; - private static final String TOKEN_URL = "tokenUrl"; - private static final String AUTH_ISSUER = "authIssuer"; - private static final String AUTH_SUBJECT = "authSubject"; - private static final String AUTH_AUDIENCE = "authAudience"; - private static final String CERT_FILENAME = "certFilename"; - private static final String CERT_PASSWORD = "certPassword"; - private static final String IV = "iv"; - private static final String TOKEN_TTL = "tokenTtl"; - private static final String WAIT_LENGTH = "waitLength"; - private static final String PROXY_HOST = "proxyHost"; - private static final String PROXY_PORT = "proxyPort"; - private static final String ENABLE_HTTP2 = "enableHttps"; - private static final String APPLIED_PATH_PREFIXES = "appliedPathPrefixes"; - private static final String SERVICE_HOST = "serviceHost"; + public static final String ENABLED = "enabled"; + public static final String TOKEN_URL = "tokenUrl"; + public static final String AUTH_ISSUER = "authIssuer"; + public static final String AUTH_SUBJECT = "authSubject"; + public static final String AUTH_AUDIENCE = "authAudience"; + public static final String CERT_FILENAME = "certFilename"; + public static final String CERT_PASSWORD = "certPassword"; + public static final String IV = "iv"; + public static final String TOKEN_TTL = "tokenTtl"; + public static final String WAIT_LENGTH = "waitLength"; + public static final String PROXY_HOST = "proxyHost"; + public static final String PROXY_PORT = "proxyPort"; + public static final String ENABLE_HTTP2 = "enableHttps"; + public static final String PATH_PREFIX_AUTH = "pathPrefixAuth"; + public static final String MORNING_STAR = "morningStar"; + public static final String CONQUEST = "conquest"; + public static final String ADVISOR_HUB = "advisorHub"; + public static final String SERVICE_HOST = "serviceHost"; boolean enabled; String tokenUrl; - String authIssuer; - String authSubject; String authAudience; String certFilename; String certPassword; - String iv; int tokenTtl; int waitLength; String proxyHost; int proxyPort; boolean enableHttp2; - List appliedPathPrefixes; + Map pathPrefixAuth; + Map morningStar; + Map conquest; + Map advisorHub; + String serviceHost; private Config config; private Map mappedConfig; - public SalesforceConfig() { - config = Config.getInstance(); - mappedConfig = config.getJsonMapConfigNoCache(CONFIG_NAME); - setConfigData(); - setConfigList(); + private SalesforceConfig() { + this(CONFIG_NAME); } /** @@ -55,17 +63,24 @@ public SalesforceConfig() { * to test different configurations. * @param configName String */ - public SalesforceConfig(String configName) { + private SalesforceConfig(String configName) { config = Config.getInstance(); mappedConfig = config.getJsonMapConfigNoCache(configName); setConfigData(); - setConfigList(); + setConfigMap(); + } + public static SalesforceConfig load() { + return new SalesforceConfig(); + } + + public static SalesforceConfig load(String configName) { + return new SalesforceConfig(configName); } void reload() { mappedConfig = config.getJsonMapConfigNoCache(CONFIG_NAME); setConfigData(); - setConfigList(); + setConfigMap(); } public boolean isEnabled() { @@ -84,22 +99,6 @@ public void setTokenUrl(String tokenUrl) { this.tokenUrl = tokenUrl; } - public String getAuthIssuer() { - return authIssuer; - } - - public void setAuthIssuer(String authIssuer) { - this.authIssuer = authIssuer; - } - - public String getAuthSubject() { - return authSubject; - } - - public void setAuthSubject(String authSubject) { - this.authSubject = authSubject; - } - public String getAuthAudience() { return authAudience; } @@ -124,14 +123,6 @@ public void setCertPassword(String certPassword) { this.certPassword = certPassword; } - public String getIv() { - return iv; - } - - public void setIv(String iv) { - this.iv = iv; - } - public int getTokenTtl() { return tokenTtl; } @@ -180,13 +171,16 @@ public void setServiceHost(String serviceHost) { this.serviceHost = serviceHost; } - public List getAppliedPathPrefixes() { - return appliedPathPrefixes; + public Map getPathPrefixAuth() { + return pathPrefixAuth; } - public void setAppliedPathPrefixes(List appliedPathPrefixes) { - this.appliedPathPrefixes = appliedPathPrefixes; + public void setPathPrefixAuth(Map pathPrefixAuth) { + this.pathPrefixAuth = pathPrefixAuth; } + public Map getMorningStar() { return morningStar; } + public Map getConquest() { return conquest; } + public Map getAdvisorHub() { return advisorHub; } private void setConfigData() { Object object = mappedConfig.get(ENABLED); @@ -197,14 +191,6 @@ private void setConfigData() { if(object != null) { setTokenUrl((String) object); } - object = mappedConfig.get(AUTH_ISSUER); - if(object != null) { - setAuthIssuer((String) object); - } - object = mappedConfig.get(AUTH_SUBJECT); - if(object != null) { - setAuthSubject((String) object); - } object = mappedConfig.get(AUTH_AUDIENCE); if(object != null) { setAuthAudience((String) object); @@ -217,10 +203,6 @@ private void setConfigData() { if(object != null) { setCertPassword((String) object); } - object = mappedConfig.get(IV); - if(object != null) { - setIv((String) object); - } object = mappedConfig.get(TOKEN_TTL); if (object != null) { setTokenTtl((int) object); @@ -247,20 +229,125 @@ private void setConfigData() { } } - private void setConfigList() { - if (mappedConfig.get(APPLIED_PATH_PREFIXES) != null) { - Object object = mappedConfig.get(APPLIED_PATH_PREFIXES); - appliedPathPrefixes = new ArrayList<>(); + private void setConfigMap() { + // path prefix auth mapping + if (mappedConfig.get(PATH_PREFIX_AUTH) != null) { + Object object = mappedConfig.get(PATH_PREFIX_AUTH); + pathPrefixAuth = new HashMap<>(); + if(object instanceof String) { + String s = (String)object; + s = s.trim(); + if(logger.isTraceEnabled()) logger.trace("pathPrefixAuth s = " + s); + if(s.startsWith("{")) { + // json format + try { + pathPrefixAuth = JsonMapper.string2Map(s); + } catch (Exception e) { + throw new ConfigException("could not parse the pathPrefixAuth json with a map of string and object."); + } + } else { + // comma separated + String[] pairs = s.split(","); + for (int i = 0; i < pairs.length; i++) { + String pair = pairs[i]; + String[] keyValue = pair.split(":"); + pathPrefixAuth.put(keyValue[0], keyValue[1]); + } + } + } else if (object instanceof Map) { + pathPrefixAuth = (Map)object; + } else { + throw new ConfigException("pathPrefixAuth must be a string object map."); + } + } + // MorningStar map + if (mappedConfig.get(MORNING_STAR) != null) { + Object object = mappedConfig.get(MORNING_STAR); + morningStar = new HashMap<>(); + if(object instanceof String) { + String s = (String)object; + s = s.trim(); + if(logger.isTraceEnabled()) logger.trace("morningStar s = " + s); + if(s.startsWith("{")) { + // json format + try { + morningStar = JsonMapper.string2Map(s); + } catch (Exception e) { + throw new ConfigException("could not parse the morningStar json with a map of string and object."); + } + } else { + // comma separated + String[] pairs = s.split(","); + for (int i = 0; i < pairs.length; i++) { + String pair = pairs[i]; + String[] keyValue = pair.split(":"); + morningStar.put(keyValue[0], keyValue[1]); + } + } + } else if (object instanceof Map) { + morningStar = (Map)object; + } else { + throw new ConfigException("morningStar must be a string object map."); + } + } + // Conquest map + if (mappedConfig.get(CONQUEST) != null) { + Object object = mappedConfig.get(CONQUEST); + conquest = new HashMap<>(); + if(object instanceof String) { + String s = (String)object; + s = s.trim(); + if(logger.isTraceEnabled()) logger.trace("conquest s = " + s); + if(s.startsWith("{")) { + // json format + try { + conquest = JsonMapper.string2Map(s); + } catch (Exception e) { + throw new ConfigException("could not parse the conquest json with a map of string and object."); + } + } else { + // comma separated + String[] pairs = s.split(","); + for (int i = 0; i < pairs.length; i++) { + String pair = pairs[i]; + String[] keyValue = pair.split(":"); + conquest.put(keyValue[0], keyValue[1]); + } + } + } else if (object instanceof Map) { + conquest = (Map)object; + } else { + throw new ConfigException("conquest must be a string object map."); + } + } + // AdvisorHub map + if (mappedConfig.get(ADVISOR_HUB) != null) { + Object object = mappedConfig.get(ADVISOR_HUB); + advisorHub = new HashMap<>(); if(object instanceof String) { - // there is only one path available - appliedPathPrefixes.add((String)object); - } else if (object instanceof List) { - List prefixes = (List)object; - prefixes.forEach(item -> { - appliedPathPrefixes.add((String)item); - }); + String s = (String)object; + s = s.trim(); + if(logger.isTraceEnabled()) logger.trace("advisorHub s = " + s); + if(s.startsWith("{")) { + // json format + try { + advisorHub = JsonMapper.string2Map(s); + } catch (Exception e) { + throw new ConfigException("could not parse the advisorHub json with a map of string and object."); + } + } else { + // comma separated + String[] pairs = s.split(","); + for (int i = 0; i < pairs.length; i++) { + String pair = pairs[i]; + String[] keyValue = pair.split(":"); + advisorHub.put(keyValue[0], keyValue[1]); + } + } + } else if (object instanceof Map) { + advisorHub = (Map)object; } else { - throw new ConfigException("appliedPathPrefixes must be a string or a list of strings."); + throw new ConfigException("advisorHub must be a string object map."); } } } diff --git a/ingress-proxy/src/main/java/com/networknt/proxy/salesforce/SalesforceHandler.java b/ingress-proxy/src/main/java/com/networknt/proxy/salesforce/SalesforceHandler.java index 82b5ad1713..3ddaf70ec8 100644 --- a/ingress-proxy/src/main/java/com/networknt/proxy/salesforce/SalesforceHandler.java +++ b/ingress-proxy/src/main/java/com/networknt/proxy/salesforce/SalesforceHandler.java @@ -69,13 +69,18 @@ public class SalesforceHandler implements MiddlewareHandler { private volatile HttpHandler next; private SalesforceConfig config; // the cached jwt token so that we can use the same token for different requests. - private String accessToken; + private String morningStarAccessToken; + private String conquestAccessToken; + private String advisorHubAccessToken; // the expiration time of access token in millisecond to control if we need to renew the token. - private long expiration = 0; + private long morningStarExpiration = 0; + private long conquestExpiration = 0; + private long advisorHubExpiration = 0; + private HttpClient client; public SalesforceHandler() { - config = new SalesforceConfig(); + config = SalesforceConfig.load(); if(logger.isInfoEnabled()) logger.info("SalesforceAuthHandler is loaded."); } @@ -104,6 +109,11 @@ public void register() { ModuleRegistry.registerModule(SalesforceHandler.class.getName(), Config.getInstance().getJsonMapConfigNoCache(SalesforceConfig.CONFIG_NAME), masks); } + @Override + public void reload() { + config.reload(); + } + @Override public void handleRequest(HttpServerExchange exchange) throws Exception { if (exchange.isInIoThread()) { @@ -112,94 +122,62 @@ public void handleRequest(HttpServerExchange exchange) throws Exception { } exchange.startBlocking(); String requestPath = exchange.getRequestPath(); - if (config.getAppliedPathPrefixes().stream().anyMatch(s -> requestPath.startsWith(s))) { - // the request path matches at least one of the prefixes. - if(System.currentTimeMillis() >= (expiration - 5000)) { // leave 5 seconds room. - String jwt = createJwt(); // created a self-signed jwt token locally - Result result = getAccessToken(jwt); - if(result.isSuccess()) { - expiration = System.currentTimeMillis() + 300 * 1000; - accessToken = result.getResult().getAccessToken(); - } else { - setExchangeStatus(exchange, result.getError()); - return; + if(logger.isTraceEnabled()) logger.trace("requestPath = " + requestPath); + for(String key: config.getPathPrefixAuth().keySet()) { + // iterate the key set from the pathPrefixAuth map + if(config.getPathPrefixAuth().get(key).equals(config.MORNING_STAR)) { + // morningStar + if(System.currentTimeMillis() >= (morningStarExpiration - 5000)) { // leave 5 seconds room. + String jwt = createJwt((String)config.getMorningStar().get(SalesforceConfig.AUTH_ISSUER), (String)config.getMorningStar().get(SalesforceConfig.AUTH_SUBJECT)); + Result result = getAccessToken(jwt); + if(result.isSuccess()) { + morningStarExpiration = System.currentTimeMillis() + 300 * 1000; + morningStarAccessToken = result.getResult().getAccessToken(); + } else { + setExchangeStatus(exchange, result.getError()); + return; + } } - } - // call the salesforce API directly here with the token from the cache. - String method = exchange.getRequestMethod().toString(); - String requestHost = config.getServiceHost(); - String queryString = exchange.getQueryString(); - String contentType = exchange.getRequestHeaders().getFirst(Headers.CONTENT_TYPE); - HttpRequest request = null; - if(method.equalsIgnoreCase("GET")) { - request = HttpRequest.newBuilder() - .uri(new URI(requestHost + requestPath + "?" + queryString)) - .headers("Authorization", "Bearer " + accessToken, "Content-Type", contentType) - .GET() - .build(); - - } else if(method.equalsIgnoreCase("DELETE")) { - request = HttpRequest.newBuilder() - .uri(new URI(requestHost + requestPath + "?" + queryString)) - .headers("Authorization", "Bearer " + accessToken, "Content-Type", contentType) - .DELETE() - .build(); - - - } else if(method.equalsIgnoreCase("POST")) { - String bodyString = exchange.getAttachment(BodyHandler.REQUEST_BODY_STRING); - if(bodyString == null) { - InputStream inputStream = exchange.getInputStream(); - bodyString = StringUtils.inputStreamToString(inputStream, StandardCharsets.UTF_8); - } - request = HttpRequest.newBuilder() - .uri(new URI(requestHost + requestPath)) - .headers("Authorization", "Bearer " + accessToken, "Content-Type", contentType) - .POST(HttpRequest.BodyPublishers.ofString(bodyString)) - .build(); - } else if(method.equalsIgnoreCase("PUT")) { - String bodyString = exchange.getAttachment(BodyHandler.REQUEST_BODY_STRING); - if(bodyString == null) { - InputStream inputStream = exchange.getInputStream(); - bodyString = StringUtils.inputStreamToString(inputStream, StandardCharsets.UTF_8); + invokeApi(exchange, "Bearer " + morningStarAccessToken); + break; + } else if(config.getPathPrefixAuth().get(key).equals(config.CONQUEST)) { + // morningStar + if(System.currentTimeMillis() >= (conquestExpiration - 5000)) { // leave 5 seconds room. + String jwt = createJwt((String)config.getConquest().get(SalesforceConfig.AUTH_ISSUER), (String)config.getConquest().get(SalesforceConfig.AUTH_SUBJECT)); + Result result = getAccessToken(jwt); + if(result.isSuccess()) { + conquestExpiration = System.currentTimeMillis() + 300 * 1000; + conquestAccessToken = result.getResult().getAccessToken(); + } else { + setExchangeStatus(exchange, result.getError()); + return; + } } - request = HttpRequest.newBuilder() - .uri(new URI(requestHost + requestPath)) - .headers("Authorization", "Bearer " + accessToken, "Content-Type", contentType) - .PUT(HttpRequest.BodyPublishers.ofString(bodyString)) - .build(); - } else if(method.equalsIgnoreCase("PATCH")) { - String bodyString = exchange.getAttachment(BodyHandler.REQUEST_BODY_STRING); - if(bodyString == null) { - InputStream inputStream = exchange.getInputStream(); - bodyString = StringUtils.inputStreamToString(inputStream, StandardCharsets.UTF_8); + invokeApi(exchange, "Bearer " + conquestAccessToken); + break; + } else if(config.getPathPrefixAuth().get(key).equals(config.ADVISOR_HUB)) { + if(System.currentTimeMillis() >= (advisorHubExpiration - 5000)) { // leave 5 seconds room. + String jwt = createJwt((String)config.getAdvisorHub().get(SalesforceConfig.AUTH_ISSUER), (String)config.getAdvisorHub().get(SalesforceConfig.AUTH_SUBJECT)); + Result result = getAccessToken(jwt); + if(result.isSuccess()) { + advisorHubExpiration = System.currentTimeMillis() + 300 * 1000; + advisorHubAccessToken = result.getResult().getAccessToken(); + } else { + setExchangeStatus(exchange, result.getError()); + return; + } } - request = HttpRequest.newBuilder() - .uri(new URI(requestHost + requestPath)) - .headers("Authorization", "Bearer " + accessToken, "Content-Type", contentType) - .method("PATCH", HttpRequest.BodyPublishers.ofString(bodyString)) - .build(); + invokeApi(exchange, "Bearer " + advisorHubAccessToken); + break; } else { - logger.error("wrong http method " + method + " for request path " + requestPath); - setExchangeStatus(exchange, METHOD_NOT_ALLOWED, method, requestPath); - return; + // not the Salesforce path, go to the next middleware handler + Handler.next(exchange, next); + break; } - HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); - HttpHeaders responseHeaders = response.headers(); - String responseBody = response.body(); - exchange.setStatusCode(response.statusCode()); - if(responseHeaders.firstValue(Headers.CONTENT_TYPE.toString()).isPresent()) { - exchange.getRequestHeaders().put(Headers.CONTENT_TYPE, responseHeaders.firstValue(Headers.CONTENT_TYPE.toString()).get()); - } - exchange.getResponseSender().send(responseBody); - return; } - Handler.next(exchange, next); } - private String createJwt() throws Exception { - String issuer = config.getAuthIssuer(); - String subject = config.getAuthSubject(); + private String createJwt(String issuer, String subject) throws Exception { String audience = config.getAuthAudience(); String certFileName = config.getCertFilename(); String certPassword = config.getCertPassword(); @@ -309,4 +287,75 @@ private Result getAccessToken(String jwt) throws Exception { return Failure.of(new Status(ESTABLISH_CONNECTION_ERROR, config.getTokenUrl())); } } + + private void invokeApi(HttpServerExchange exchange, String authorization) throws Exception { + // call the Salesforce API directly here with the token from the cache. + String requestPath = exchange.getRequestPath(); + String method = exchange.getRequestMethod().toString(); + String requestHost = config.getServiceHost(); + String queryString = exchange.getQueryString(); + String contentType = exchange.getRequestHeaders().getFirst(Headers.CONTENT_TYPE); + HttpRequest request = null; + if(method.equalsIgnoreCase("GET")) { + request = HttpRequest.newBuilder() + .uri(new URI(requestHost + requestPath + "?" + queryString)) + .headers("Authorization", authorization, "Content-Type", contentType) + .GET() + .build(); + + } else if(method.equalsIgnoreCase("DELETE")) { + request = HttpRequest.newBuilder() + .uri(new URI(requestHost + requestPath + "?" + queryString)) + .headers("Authorization", authorization, "Content-Type", contentType) + .DELETE() + .build(); + + } else if(method.equalsIgnoreCase("POST")) { + String bodyString = exchange.getAttachment(BodyHandler.REQUEST_BODY_STRING); + if(bodyString == null) { + InputStream inputStream = exchange.getInputStream(); + bodyString = StringUtils.inputStreamToString(inputStream, StandardCharsets.UTF_8); + } + request = HttpRequest.newBuilder() + .uri(new URI(requestHost + requestPath)) + .headers("Authorization", authorization, "Content-Type", contentType) + .POST(HttpRequest.BodyPublishers.ofString(bodyString)) + .build(); + } else if(method.equalsIgnoreCase("PUT")) { + String bodyString = exchange.getAttachment(BodyHandler.REQUEST_BODY_STRING); + if(bodyString == null) { + InputStream inputStream = exchange.getInputStream(); + bodyString = StringUtils.inputStreamToString(inputStream, StandardCharsets.UTF_8); + } + request = HttpRequest.newBuilder() + .uri(new URI(requestHost + requestPath)) + .headers("Authorization", authorization, "Content-Type", contentType) + .PUT(HttpRequest.BodyPublishers.ofString(bodyString)) + .build(); + } else if(method.equalsIgnoreCase("PATCH")) { + String bodyString = exchange.getAttachment(BodyHandler.REQUEST_BODY_STRING); + if(bodyString == null) { + InputStream inputStream = exchange.getInputStream(); + bodyString = StringUtils.inputStreamToString(inputStream, StandardCharsets.UTF_8); + } + request = HttpRequest.newBuilder() + .uri(new URI(requestHost + requestPath)) + .headers("Authorization", authorization, "Content-Type", contentType) + .method("PATCH", HttpRequest.BodyPublishers.ofString(bodyString)) + .build(); + } else { + logger.error("wrong http method " + method + " for request path " + requestPath); + setExchangeStatus(exchange, METHOD_NOT_ALLOWED, method, requestPath); + return; + } + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + HttpHeaders responseHeaders = response.headers(); + String responseBody = response.body(); + exchange.setStatusCode(response.statusCode()); + if(responseHeaders.firstValue(Headers.CONTENT_TYPE.toString()).isPresent()) { + exchange.getRequestHeaders().put(Headers.CONTENT_TYPE, responseHeaders.firstValue(Headers.CONTENT_TYPE.toString()).get()); + } + exchange.getResponseSender().send(responseBody); + } + } diff --git a/ingress-proxy/src/main/resources/config/salesforce.yml b/ingress-proxy/src/main/resources/config/salesforce.yml index 3c0225e159..d412f11cc9 100644 --- a/ingress-proxy/src/main/resources/config/salesforce.yml +++ b/ingress-proxy/src/main/resources/config/salesforce.yml @@ -3,18 +3,12 @@ enabled: ${salesforce.enabled:false} # Salesforce get jwt token URL to send the request tokenUrl: ${salesforce.tokenUrl:https://test.salesforce.com/services/oauth2/token} -# Authentication issuer -authIssuer: ${salesforce.authIssuer:2MVG9CM7abZT_gV7nAVssYIKEY2otVSwr.I4itTgn6mvS9xedke} -# Authentication subject -authSubject: ${salesforce.authSubject:conquestintegration@networknt.com} # Authentication audience authAudience: ${salesforce.authAudience:https://test.salesforce.com} # Certificate file name. The private key alias is the filename without the extension. certFilename: ${salesforce.certFilename:apigatewayuat.pfx} # Certificate file password certPassword: ${salesforce.certPassword:password} -# IV -iv: ${salesforce.iv:YoeAb3a/Epqoge} # Token time to live tokenTtl: ${salesforce.tokenTtl:60} # Wait length @@ -25,8 +19,41 @@ proxyHost: ${salesforce.proxyHost:} proxyPort: ${salesforce.proxyPort:} # If HTTP2 is used to connect to the salesforce site. enableHttp2: ${salesforce.enableHttp2:true} -# A list of applied request path prefixes, other requests will skip this handler. The value can be a string -# if there is only one request path prefix needs this handler. or a list of strings if there are multiple. -appliedPathPrefixes: ${salesforce.appliedPathPrefixes:} # Salesforce target service host for service access with the token get with above property. serviceHost: ${salesforce.serviceHost} + +# A list of applied request path prefixes, other requests will skip this handler. The value can be a string +# if there is only one request path prefix needs this handler. or a list of strings if there are multiple. +pathPrefixAuth: ${salesforce.pathPrefixAuth:} +# format with JSON for config server +# {"/morningStar":"morningStar","/conquest":"conquest","/advisorHub":"advisorHub"} + +# format with YAML for readability +# /morningStar: morningStar +# /conquest: conquest +# /advisorHub: advisorHub + +# MorningStar authentication configuration +morningStar: + # Authentication issuer for MorningStar + authIssuer: ${salesforce.morningStar.authIssuer:} + # Authentication subject for MorningStar + authSubject: ${salesforce.morningStar.authSubject:} + # MorningStar IV + iv: ${salesforce.morningStar.iv:} +# Conquest authentication configuration +conquest: + # Authentication issuer for Conquest + authIssuer: ${salesforce.conquest.authIssuer:} + # Authentication subject for Conquest + authSubject: ${salesforce.conquest.authSubject:} + # Conquest IV + iv: ${salesforce.conquest.iv:} +# AdvisorHub authentication configuration +advisorHub: + # Authentication issuer for advisorHub + authIssuer: ${salesforce.advisorHub.authIssuer:} + # Authentication subject for advisorHub + authSubject: ${salesforce.advisorHub.authSubject:} + # advisorHub IV + iv: ${salesforce.advisorHub.iv:} diff --git a/ingress-proxy/src/test/java/com/networknt/proxy/salesforce/SalesforceConfigTest.java b/ingress-proxy/src/test/java/com/networknt/proxy/salesforce/SalesforceConfigTest.java new file mode 100644 index 0000000000..1dbfbcf8a8 --- /dev/null +++ b/ingress-proxy/src/test/java/com/networknt/proxy/salesforce/SalesforceConfigTest.java @@ -0,0 +1,22 @@ +package com.networknt.proxy.salesforce; + +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; + +public class SalesforceConfigTest { + @Test + @Ignore + public void testConfigLoad() { + SalesforceConfig config = SalesforceConfig.load(); + Assert.assertEquals(3, config.getPathPrefixAuth().size()); + Assert.assertTrue(config.getMorningStar().size() == 3); + Assert.assertTrue(config.getConquest().size() == 3); + Assert.assertTrue(config.getAdvisorHub().size() == 3); + + Assert.assertTrue(config.getMorningStar().get(config.IV) != null); + Assert.assertTrue(config.getConquest().get(config.IV) != null); + Assert.assertTrue(config.getAdvisorHub().get(config.IV) != null); + } + +} diff --git a/ingress-proxy/src/test/java/com/networknt/proxy/salesforce/SalesforceHandlerTest.java b/ingress-proxy/src/test/java/com/networknt/proxy/salesforce/SalesforceHandlerTest.java index 1a4fcac137..1bede89d9c 100644 --- a/ingress-proxy/src/test/java/com/networknt/proxy/salesforce/SalesforceHandlerTest.java +++ b/ingress-proxy/src/test/java/com/networknt/proxy/salesforce/SalesforceHandlerTest.java @@ -24,7 +24,7 @@ public class SalesforceHandlerTest { static final Logger logger = LoggerFactory.getLogger(SalesforceHandlerTest.class); - static final SalesforceConfig config = new SalesforceConfig(); + static final SalesforceConfig config = SalesforceConfig.load(); static Undertow server = null; @BeforeClass diff --git a/ingress-proxy/src/test/resources/config/values.yml b/ingress-proxy/src/test/resources/config/values.yml index 0cf90f1c3c..5238e68d0e 100644 --- a/ingress-proxy/src/test/resources/config/values.yml +++ b/ingress-proxy/src/test/resources/config/values.yml @@ -14,6 +14,7 @@ salesforce.appliedPathPrefixes: - /services/apexrest salesforce.serviceHost: https://nnt-sit.my.salesforce.com + # mras.yml mras.enabled: true mras.keyStoreName: api.ais-dev