Skip to content

Commit 3911474

Browse files
committed
code clean up
1 parent cea001d commit 3911474

File tree

8 files changed

+180
-159
lines changed

8 files changed

+180
-159
lines changed

README.adoc

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,26 +19,21 @@ compile ("io.devxchange:obfuscator:1.0.0-SNAPSHOT")
1919

2020
## Usage
2121

22-
### Enable obfuscator - Add below property to your application.properties file
23-
24-
```
25-
obfuscator.enabled=true
26-
```
2722

2823
### Demo Project
2924

30-
https://github.com/devxchange-blog/obfuscator-demo.git[logmetrics-demo]
25+
https://github.com/devxchange-blog/obfuscator-demo.git[obfuscator-demo]
3126

3227
## Release History
3328

34-
** 1.0.0-SNAPSHOT
35-
* logging rest verb & payload to console.
36-
* feature to enable/disable payload logging
29+
** 0.0.1-SNAPSHOT
30+
* obfuscate json object.
31+
* obfuscate xml object
3732

3833
## Meta
3934
Karthikeyan Sadayamuthu – https://www.linkedin.com/in/ksadayamuthu/[LinkedIn]
4035

41-
Distributed under the Apache License. See ``LICENSE`` for more information. https://github.com/devxchange/logmetrics-java/blob/master/LICENSE[license]
36+
Distributed under the Apache License. See ``LICENSE`` for more information. https://github.com/devxchange/obfuscator-java/blob/master/LICENSE[license]
4237

4338
## Contributing
4439

build.gradle

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ apply plugin: 'com.jfrog.artifactory'
2121
apply plugin: 'com.jfrog.bintray'
2222

2323
group 'io.devxchange'
24-
version = '0.0.1-SNAPSHOT'
24+
version = '0.0.2-SNAPSHOT'
2525
sourceCompatibility = 1.8
2626

2727
repositories {
@@ -41,6 +41,9 @@ dependencies {
4141
compile group: 'commons-io', name: 'commons-io', version: '2.4'
4242
compile("com.google.code.gson:gson:2.3.1")
4343
compile("com.jayway.jsonpath:json-path:2.0.0")
44+
testImplementation('org.junit.jupiter:junit-jupiter-api:5.4.2')
45+
testRuntime('org.junit.jupiter:junit-jupiter-engine:5.4.2')
46+
4447
}
4548

4649
def javaApiUrl = 'http://docs.oracle.com/javase/1.7.0/docs/api/'

out/production/payload-obfuscator/application.properties

Whitespace-only changes.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package io.devxchange.obfuscator;
2+
3+
import com.fasterxml.jackson.core.type.TypeReference;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import io.devxchange.obfuscator.util.ObfuscatorUtil;
6+
import org.apache.commons.lang3.StringUtils;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
10+
import java.io.IOException;
11+
import java.text.MessageFormat;
12+
import java.util.Map;
13+
import java.util.Set;
14+
import java.util.regex.Matcher;
15+
import java.util.regex.Pattern;
16+
17+
/**
18+
* Created by io.devxchange on 5/2/17.
19+
*/
20+
public class Obfuscator {
21+
22+
private static final Logger LOG = LoggerFactory.getLogger(Obfuscator.class);
23+
private static final TypeReference defaultTypeRef = new TypeReference<Map<String, Object>>(){};
24+
private static final ObjectMapper jsonObjectMapper = new ObjectMapper();
25+
public static final String XML_PATTERN = "(<(\\w*:)?({0})(\\s.*?)?>)(.*?)(</(\\2?)(\\3)>)";
26+
27+
public static String obfuscateXmlString(String payload, Map<String,Set<String>> strategyMap) {
28+
if(StringUtils.isBlank(payload) || strategyMap==null || strategyMap.isEmpty()) {
29+
return payload;
30+
} else {
31+
String fieldNameRegex = ObfuscatorUtil.extractFieldRegex(strategyMap);
32+
Map<String,String> fieldStrategyMap = ObfuscatorUtil.createFieldStrategyMap(strategyMap);
33+
String regex = MessageFormat.format(XML_PATTERN, new Object[]{fieldNameRegex});
34+
Matcher matcher = Pattern.compile(regex).matcher(payload);
35+
StringBuffer processedPayload = new StringBuffer();
36+
while(matcher.find()) {
37+
String startTag = matcher.group(1);
38+
String namespace = matcher.group(2); // Are we really stripping out the namespacing???
39+
String fieldName = matcher.group(3);
40+
String bodyText = matcher.group(5);
41+
String endTag = matcher.group(6);
42+
matcher.appendReplacement(processedPayload, startTag + ObfuscatorUtil.obfuscate(fieldStrategyMap.get(fieldName),bodyText) + endTag);
43+
}
44+
matcher.appendTail(processedPayload);
45+
return processedPayload.toString();
46+
}
47+
}
48+
public static String obfuscateJsonString(String payload, Map<String, Set<String>> strategyMap) {
49+
if(StringUtils.isBlank(payload) || strategyMap==null || strategyMap.isEmpty()) {
50+
return payload;
51+
} else {
52+
Map<String, Object> jsonMap;
53+
try {
54+
jsonMap = jsonObjectMapper.readValue(payload, defaultTypeRef);
55+
} catch(IOException ioEx) {
56+
LOG.error("Failed to parse json payload. Returning payload unaltered.",ioEx);
57+
return payload;
58+
}
59+
if(jsonMap!=null) {
60+
Map<String,String> fieldStrategyMap = ObfuscatorUtil.createFieldStrategyMap(strategyMap);
61+
ObfuscatorUtil.processJsonMap(jsonMap,fieldStrategyMap);
62+
// Convert back map to json
63+
String jsonResult = "";
64+
try {
65+
jsonResult = jsonObjectMapper.writeValueAsString(jsonMap);
66+
} catch (IOException e) {
67+
LOG.warn("cannot create json from Map" + e.getMessage());
68+
}
69+
return jsonResult;
70+
} else {
71+
LOG.error("JSON object mapping of payload returned null. Returning original payload.");
72+
return payload;
73+
}
74+
}
75+
}
76+
}

src/main/java/io/devxchange/obfuscator/XmlObfuscator.java

Lines changed: 0 additions & 138 deletions
This file was deleted.

src/test/java/io/devxchange/obfuscator/JsonObfuscatorTest.java

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package io.devxchange.obfuscator;
2+
import org.junit.jupiter.api.Test;
3+
4+
import java.util.HashMap;
5+
import java.util.HashSet;
6+
import java.util.Map;
7+
import java.util.Set;
8+
9+
public class ObfuscatorTest {
10+
11+
@Test
12+
public void testSimpleJson() {
13+
Map<String, Set<String>> obfuscatorMap= new HashMap<>();
14+
Set<String> items = new HashSet<>();
15+
items.add("name");
16+
items.add("salary");
17+
items.add("age");
18+
obfuscatorMap.put("Obfuscate", items);
19+
String response = Obfuscator.obfuscateJsonString(simpleJson,obfuscatorMap);
20+
System.out.println(response);
21+
}
22+
@Test
23+
public void testJsonList() {
24+
Map<String, Set<String>> obfuscatorMap= new HashMap<>();
25+
Set<String> items = new HashSet<>();
26+
items.add("name");
27+
items.add("salary");
28+
items.add("age");
29+
obfuscatorMap.put("Obfuscate", items);
30+
String response = Obfuscator.obfuscateJsonString(jsonList,obfuscatorMap);
31+
System.out.println(response);
32+
}
33+
34+
@Test
35+
public void testSimpleXML() {
36+
Map<String, Set<String>> obfuscatorMap= new HashMap<>();
37+
Set<String> items = new HashSet<>();
38+
items.add("name");
39+
items.add("salary");
40+
items.add("age");
41+
obfuscatorMap.put("Obfuscate", items);
42+
String response = Obfuscator.obfuscateXmlString(simpleXML,obfuscatorMap);
43+
System.out.println(response);
44+
}
45+
46+
@Test
47+
public void testComplexXML() {
48+
Map<String, Set<String>> obfuscatorMap= new HashMap<>();
49+
Set<String> items = new HashSet<>();
50+
items.add("name");
51+
items.add("salary");
52+
items.add("age");
53+
obfuscatorMap.put("Obfuscate", items);
54+
String response = Obfuscator.obfuscateXmlString(complexXML,obfuscatorMap);
55+
System.out.println(response);
56+
}
57+
58+
private String simpleJson = "{\"id\":1,\"name\":\"karthik\",\"age\":29,\"salary\":115000}";
59+
private String jsonList = "{\"user\":[{\"id\":1,\"name\":\"karthik\",\"age\":29,\"salary\":115000},{\"id\":2,\"name\":\"Karthikeyan Sadayamuthu\",\"age\":30,\"salary\":500000},{\"id\":3,\"name\":\"Sadayamuthu\",\"age\":30,\"salary\":500000},{\"id\":4,\"name\":\"Vinodh Kannan Sadayamuthu\",\"age\":30,\"salary\":500000}]}";
60+
private String simpleXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
61+
"<root>\n" +
62+
" <id>1</id>\n" +
63+
" <name>karthik</name>\n" +
64+
" <age>29</age>\n" +
65+
" <salary>115000</salary>\n" +
66+
"</root>";
67+
private String complexXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
68+
"<root>\n" +
69+
" <user>\n" +
70+
" <id>1</id>\n" +
71+
" <name>karthik</name>\n" +
72+
" <age>29</age>\n" +
73+
" <salary>115000</salary>\n" +
74+
" </user>\n" +
75+
" <user>\n" +
76+
" <id>2</id>\n" +
77+
" <name>Karthikeyan Sadayamuthu</name>\n" +
78+
" <age>30</age>\n" +
79+
" <salary>500000</salary>\n" +
80+
" </user>\n" +
81+
" <user>\n" +
82+
" <id>3</id>\n" +
83+
" <name>Sadayamuthu</name>\n" +
84+
" <age>30</age>\n" +
85+
" <salary>500000</salary>\n" +
86+
" </user>\n" +
87+
" <user>\n" +
88+
" <id>4</id>\n" +
89+
" <name>Vinodh Kannan Sadayamuthu</name>\n" +
90+
" <age>30</age>\n" +
91+
" <salary>500000</salary>\n" +
92+
" </user>\n" +
93+
"</root>";
94+
95+
}

src/test/java/io/devxchange/obfuscator/XmlObfuscatorTest.java

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)