Skip to content

Commit

Permalink
fixes #2140 update mras, salesforce and external service config to su…
Browse files Browse the repository at this point in the history
…pport JSON string (#2141)
  • Loading branch information
stevehu authored Feb 14, 2024
1 parent 3f15a2b commit 98214d1
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public class MrasConfig {
Map<String, Object> basicAuth;

String serviceHost;
private Config config;
private final Config config;
private Map<String, Object> mappedConfig;

private MrasConfig() {
Expand Down Expand Up @@ -137,15 +137,26 @@ public List<UrlRewriteRule> getUrlRewriteRules() {

public void setUrlRewriteRules() {
this.urlRewriteRules = new ArrayList<>();
if (mappedConfig.get("urlRewriteRules") !=null && mappedConfig.get("urlRewriteRules") instanceof String) {
urlRewriteRules.add(UrlRewriteRule.convertToUrlRewriteRule((String)mappedConfig.get("urlRewriteRules")));
} else {
List<String> rules = (List)mappedConfig.get("urlRewriteRules");
if(rules != null) {
for (String s : rules) {
urlRewriteRules.add(UrlRewriteRule.convertToUrlRewriteRule(s));
}
}
if (mappedConfig.get("urlRewriteRules") != null) {
if(mappedConfig.get("urlRewriteRules") instanceof String) {
String s = (String)mappedConfig.get("urlRewriteRules");
s = s.trim();
if(s.startsWith("[")) {
// multiple rules
List<String> rules = (List<String>) JsonMapper.fromJson(s, List.class);
for (String rule : rules) {
urlRewriteRules.add(UrlRewriteRule.convertToUrlRewriteRule(rule));
}
} else {
// single rule
urlRewriteRules.add(UrlRewriteRule.convertToUrlRewriteRule(s));
}
} else if (mappedConfig.get("urlRewriteRules") instanceof List) {
List<String> rules = (List)mappedConfig.get("urlRewriteRules");
for (String s : rules) {
urlRewriteRules.add(UrlRewriteRule.convertToUrlRewriteRule(s));
}
}
}
}
public void setUrlRewriteRules(List<UrlRewriteRule> urlRewriteRules) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.networknt.config.Config;
import com.networknt.config.ConfigException;
import com.networknt.config.JsonMapper;
import com.networknt.handler.config.UrlRewriteRule;
import com.networknt.proxy.PathPrefixAuth;
import org.slf4j.Logger;
Expand Down Expand Up @@ -151,17 +152,31 @@ public List<UrlRewriteRule> getUrlRewriteRules() {

public void setUrlRewriteRules() {
this.urlRewriteRules = new ArrayList<>();
if (mappedConfig.get("urlRewriteRules") !=null && mappedConfig.get("urlRewriteRules") instanceof String) {
urlRewriteRules.add(UrlRewriteRule.convertToUrlRewriteRule((String)mappedConfig.get("urlRewriteRules")));
} else {
List<String> rules = (List)mappedConfig.get("urlRewriteRules");
if(rules != null) {
if(mappedConfig.get("urlRewriteRules") != null) {
if (mappedConfig.get("urlRewriteRules") instanceof String) {
String s = (String)mappedConfig.get("urlRewriteRules");
s = s.trim();
// There are two formats for the urlRewriteRules. One is a string separated by a space
// and the other is a list of strings separated by a space in JSON list format.
if(s.startsWith("[")) {
// multiple rules
List<String> rules = (List<String>) JsonMapper.fromJson(s, List.class);
for (String rule : rules) {
urlRewriteRules.add(UrlRewriteRule.convertToUrlRewriteRule(rule));
}
} else {
// single rule
urlRewriteRules.add(UrlRewriteRule.convertToUrlRewriteRule(s));
}
} else if (mappedConfig.get("urlRewriteRules") instanceof List) {
List<String> rules = (List)mappedConfig.get("urlRewriteRules");
for (String s : rules) {
urlRewriteRules.add(UrlRewriteRule.convertToUrlRewriteRule(s));
}
}
}
}

public void setUrlRewriteRules(List<UrlRewriteRule> urlRewriteRules) {
this.urlRewriteRules = urlRewriteRules;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,9 @@ public void testHostMapping() {
}
}
}
@Test
public void testUrlRewriteRules() {
ExternalServiceConfig config = new ExternalServiceConfig();
assert config.getUrlRewriteRules().size() == 2;
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
package com.networknt.proxy.mras;

import com.networknt.common.ContentType;
import com.networknt.handler.config.UrlRewriteRule;
import com.networknt.proxy.PathPrefixAuth;
import com.networknt.proxy.salesforce.SalesforceConfig;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;

import java.util.List;
import java.util.Map;

public class MrasConfigTest {
@Test
@Ignore
Expand All @@ -27,4 +33,19 @@ public void testContentType() {
String s = ContentType.APPLICATION_JSON.value();
System.out.println("s = " + s);
}

@Test
public void testPathPrefixAuths() {
MrasConfig config = MrasConfig.load();
Map<String, Object> pathPrefixAuthList = config.getPathPrefixAuth();
Assert.assertEquals(4, pathPrefixAuthList.size());
}

@Test
public void testUrlRewriteRules() {
MrasConfig config = MrasConfig.load();
List<UrlRewriteRule> urlRewriteRules = config.getUrlRewriteRules();
Assert.assertEquals(2, urlRewriteRules.size());
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.networknt.proxy.salesforce;

import com.networknt.handler.config.UrlRewriteRule;
import com.networknt.proxy.PathPrefixAuth;
import org.junit.Assert;
import org.junit.Test;
Expand All @@ -18,4 +19,18 @@ public void testConfigLoad() {
Assert.assertTrue(pathPrefixAuthList.get(0).getIv() != null);
Assert.assertTrue(pathPrefixAuthList.get(0).getServiceHost() != null);
}

@Test
public void testPathPrefixAuths() {
SalesforceConfig config = SalesforceConfig.load();
List<PathPrefixAuth> pathPrefixAuthList = config.getPathPrefixAuths();
Assert.assertEquals(3, pathPrefixAuthList.size());
}

@Test
public void testUrlRewriteRules() {
SalesforceConfig config = SalesforceConfig.load();
List<UrlRewriteRule> urlRewriteRules = config.getUrlRewriteRules();
Assert.assertEquals(2, urlRewriteRules.size());
}
}
6 changes: 5 additions & 1 deletion ingress-proxy/src/test/resources/config/values.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ client.timeout: 10000
salesforce.enabled: true
salesforce.certFilename: apigatewayuat.pfx
salesforce.certPassword: password01
salesforce.pathPrefixAuths: [{"pathPrefix":"/salesforce","grantType":"urn:ietf:params:oauth:grant-type:jwt-bearer","authIssuer":"3MVG9S11UK8FGR3O.vJebzXvWgAE211Z9KX_7vmKt6k300-2913g_AdsTWtzBTLI232Y1w21kw2HANBfU9jTTJF9h5mL.2tJdY142hyaPW","authSubject":"[email protected]","authAudience":"https://test.salesforce.com","iv":"Yeocae324eAvs2a/P33y3Ea3Rqg","tokenTtl":60,"waitLength":5000,"serviceHost":"https://nnt-sit.my.salesforce.com"},{"pathPrefix":"/services/apexrest","grantType":"urn:ietf:params:oauth:grant-type:jwt-bearer","authIssuer":"3MVG9S11UK8FGR3O.vJebzXvWgAE211Z9KX_7vmKt6k300-2913g_AdsTWtzBTLI232Y1w21kw2HANBfU9jTTJF9h5mL.2tJdY142hyaPW","authSubject":"[email protected]","authAudience":"https://test.salesforce.com","iv":"Yeocae324eAvs2a/P33y3Ea3Rqg","tokenTtl":60,"waitLength":5000,"serviceHost":"https://nnt-sit.my.salesforce.com"},{"pathPrefix":"/services/apexrest","grantType":"password","username":"dummy","password":"password123","clientId":"clientId","clientSecret":"clientSecret","responseType":"token","tokenTtl":60,"waitLength":5000,"serviceHost":"https://nnt-sit.my.salesforce.com"}]
# salesforce.pathPrefixAuths: [{"pathPrefix":"/salesforce","grantType":"urn:ietf:params:oauth:grant-type:jwt-bearer","authIssuer":"3MVG9S11UK8FGR3O.vJebzXvWgAE211Z9KX_7vmKt6k300-2913g_AdsTWtzBTLI232Y1w21kw2HANBfU9jTTJF9h5mL.2tJdY142hyaPW","authSubject":"[email protected]","authAudience":"https://test.salesforce.com","iv":"Yeocae324eAvs2a/P33y3Ea3Rqg","tokenTtl":60,"waitLength":5000,"serviceHost":"https://nnt-sit.my.salesforce.com"},{"pathPrefix":"/services/apexrest","grantType":"urn:ietf:params:oauth:grant-type:jwt-bearer","authIssuer":"3MVG9S11UK8FGR3O.vJebzXvWgAE211Z9KX_7vmKt6k300-2913g_AdsTWtzBTLI232Y1w21kw2HANBfU9jTTJF9h5mL.2tJdY142hyaPW","authSubject":"[email protected]","authAudience":"https://test.salesforce.com","iv":"Yeocae324eAvs2a/P33y3Ea3Rqg","tokenTtl":60,"waitLength":5000,"serviceHost":"https://nnt-sit.my.salesforce.com"},{"pathPrefix":"/services/apexrest","grantType":"password","username":"dummy","password":"password123","clientId":"clientId","clientSecret":"clientSecret","responseType":"token","tokenTtl":60,"waitLength":5000,"serviceHost":"https://nnt-sit.my.salesforce.com"}]
salesforce.pathPrefixAuths: "[{\"pathPrefix\":\"/salesforce\",\"grantType\":\"urn:ietf:params:oauth:grant-type:jwt-bearer\",\"authIssuer\":\"3MVG9S11UK8FGR3O.vJebzXvWgAE211Z9KX_7vmKt6k300-2913g_AdsTWtzBTLI232Y1w21kw2HANBfU9jTTJF9h5mL.2tJdY142hyaPW\",\"authSubject\":\"[email protected]\",\"authAudience\":\"https://test.salesforce.com\",\"iv\":\"Yeocae324eAvs2a/P33y3Ea3Rqg\",\"tokenTtl\":60,\"waitLength\":5000,\"serviceHost\":\"https://nnt-sit.my.salesforce.com\"},{\"pathPrefix\":\"/services/apexrest\",\"grantType\":\"urn:ietf:params:oauth:grant-type:jwt-bearer\",\"authIssuer\":\"3MVG9S11UK8FGR3O.vJebzXvWgAE211Z9KX_7vmKt6k300-2913g_AdsTWtzBTLI232Y1w21kw2HANBfU9jTTJF9h5mL.2tJdY142hyaPW\",\"authSubject\":\"[email protected]\",\"authAudience\":\"https://test.salesforce.com\",\"iv\":\"Yeocae324eAvs2a/P33y3Ea3Rqg\",\"tokenTtl\":60,\"waitLength\":5000,\"serviceHost\":\"https://nnt-sit.my.salesforce.com\"},{\"pathPrefix\":\"/services/apexrest\",\"grantType\":\"password\",\"username\":\"dummy\",\"password\":\"password123\",\"clientId\":\"clientId\",\"clientSecret\":\"clientSecret\",\"responseType\":\"token\",\"tokenTtl\":60,\"waitLength\":5000,\"serviceHost\":\"https://nnt-sit.my.salesforce.com\"}]"
# - pathPrefix: /salesforce
# grantType: urn:ietf:params:oauth:grant-type:jwt-bearer
# authIssuer: 3MVG9S11UK8FGR3O.vJebzXvWgAE211Z9KX_7vmKt6k300-2913g_AdsTWtzBTLI232Y1w21kw2HANBfU9jTTJF9h5mL.2tJdY142hyaPW
Expand Down Expand Up @@ -38,6 +39,7 @@ salesforce.pathPrefixAuths: [{"pathPrefix":"/salesforce","grantType":"urn:ietf:p
# waitLength: 5000
# tokenUrl: https://test.salesforce.com/services/oauth2/token
# serviceHost: https://nnt-sit.my.salesforce.com
salesforce.urlRewriteRules: "[\"/gateway/GetOKTAToken/1.0(.*)$ /oauth2/$1/v1/token\",\"/gateway/GetOKTATokenNT/1.0(.*)$ /oauth2/$1/v1/token\"]"

# mras.yml
mras.enabled: true
Expand Down Expand Up @@ -75,6 +77,7 @@ mras.pathPrefixAuth:
/test: basicAuth
/pdf/generator: anonymous
/advisor: microsoft
mras.urlRewriteRules: "[\"/gateway/GetOKTAToken/1.0(.*)$ /oauth2/$1/v1/token\",\"/gateway/GetOKTATokenNT/1.0(.*)$ /oauth2/$1/v1/token\"]"

# conquest.yml
conquest.enabled: true
Expand All @@ -90,3 +93,4 @@ externalService.pathHostMappings: "[\"/sharepoint https://sharepoint.microsoft.c
# - /get https://postman-echo.com
# - /post https://postman-echo.com
# - /abc https://abc.com
externalService.urlRewriteRules: "[\"/gateway/GetOKTAToken/1.0(.*)$ /oauth2/$1/v1/token\",\"/gateway/GetOKTATokenNT/1.0(.*)$ /oauth2/$1/v1/token\"]"
49 changes: 49 additions & 0 deletions ingress-proxy/src/test/resources/logback-test.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2016 Network New Technologies Inc.
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->

<configuration>
<turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
<Marker>PROFILER</Marker>
<!--<OnMatch>DENY</OnMatch>-->
<OnMatch>NEUTRAL</OnMatch>
</turboFilter>

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5marker %-5level %class{36}:%L %M - %msg%n</pattern>
</encoder>
</appender>

<appender name="log" class="ch.qos.logback.core.FileAppender">
<File>target/test.log</File>
<Append>false</Append>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %class{36}:%L %M - %msg%n</Pattern>
</layout>
</appender>

<root level="info">
<appender-ref ref="stdout"/>
</root>

<logger name="com.networknt" level="trace" additivity="false">
<appender-ref ref="stdout"/>
</logger>

</configuration>

0 comments on commit 98214d1

Please sign in to comment.