Skip to content
This repository was archived by the owner on Jun 11, 2024. It is now read-only.

Commit fca2968

Browse files
authored
Merge pull request #38 from browserup/merge-har-reader
Merge har-reader and use mrog LittleProxy fork
2 parents fef53ea + 0fd6472 commit fca2968

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+6171
-35
lines changed

browserup-proxy-core/build.gradle

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,7 @@ uploadArchives {
5757
dependencies {
5858
implementation project(':browserup-proxy-mitm')
5959

60-
implementation 'com.browserup:har-reader:3.0.0-SNAPSHOT'
61-
implementation 'com.browserup:littleproxy:2.0.0-SNAPSHOT'
62-
6360
implementation 'javax.xml.bind:jaxb-api:2.3.1'
64-
// Needed by org.littleshoot.proxy JAR
65-
implementation 'org.apache.commons:commons-lang3:3.5'
66-
67-
// We haven't upgraded to this:
68-
// implementation('org.littleshoot:littleproxy:1.1.2')
69-
// because it still uses Guava 23. We should fork it some day.
70-
//implementation('com.browserup.bup:littleproxy:1.1.0-beta-bup-15') {
71-
// Using our own fork now, build it and put it in the lib/ dir
72-
// implementation('org.littleshoot:littleproxy:1.1.2') {
73-
// exclude(module: 'barchart-udt-bundle')
74-
// exclude(module: 'commons-cli')
75-
// }
7661

7762
implementation 'com.fasterxml.jackson.core:jackson-core:2.8.6'
7863
implementation 'com.fasterxml.jackson.core:jackson-databind:2.8.6'
@@ -89,6 +74,7 @@ dependencies {
8974
implementation 'org.seleniumhq.selenium:selenium-api:3.141.59'
9075
implementation 'org.slf4j:jcl-over-slf4j:1.7.22'
9176
implementation 'org.slf4j:slf4j-api:1.7.22'
77+
implementation 'xyz.rogfam:littleproxy:2.0.0-beta-3'
9278

9379
testImplementation 'junit:junit:4.12'
9480
testImplementation 'org.codehaus.groovy:groovy-all:2.4.16'

browserup-proxy-core/src/main/java/com/browserup/bup/BrowserUpProxyServer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
import org.littleshoot.proxy.HttpProxyServer;
6969
import org.littleshoot.proxy.HttpProxyServerBootstrap;
7070
import org.littleshoot.proxy.MitmManager;
71+
import org.littleshoot.proxy.impl.ClientDetails;
7172
import org.littleshoot.proxy.impl.DefaultHttpProxyServer;
7273
import org.littleshoot.proxy.impl.ProxyUtils;
7374
import org.littleshoot.proxy.impl.ThreadPoolConfiguration;
@@ -361,7 +362,7 @@ public int getMaximumResponseBufferSizeInBytes() {
361362

362363
bootstrap.withChainProxyManager(new ChainedProxyManager() {
363364
@Override
364-
public void lookupChainedProxies(HttpRequest httpRequest, Queue<ChainedProxy> chainedProxies) {
365+
public void lookupChainedProxies(HttpRequest httpRequest, Queue<ChainedProxy> chainedProxies, ClientDetails clientDetails) {
365366
final InetSocketAddress upstreamProxy = upstreamProxyAddress;
366367
if (upstreamProxy != null) {
367368
chainedProxies.add(new ChainedProxyAdapter() {

browserup-proxy-core/src/main/java/com/browserup/bup/client/ClientUtil.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public static AdvancedHostResolver createNativeResolver() {
4848
* @return a new DnsJavaResolver
4949
* @deprecated The dnsjava resolver has been deprecated in favor of the standard JVM resolver and will be removed in BUP &gt;2.1.
5050
*/
51+
@Deprecated
5152
public static AdvancedHostResolver createDnsJavaResolver() {
5253
return new DnsJavaResolver();
5354
}
@@ -60,6 +61,7 @@ public static AdvancedHostResolver createDnsJavaResolver() {
6061
* @return a new ChainedHostResolver that resolves addresses first using a DnsJavaResolver, then using a NativeCacheManipulatingResolver
6162
* @deprecated The dnsjava resolver has been deprecated in favor of the standard JVM resolver and will be removed in BUP &gt;2.1.
6263
*/
64+
@Deprecated
6365
public static AdvancedHostResolver createDnsJavaWithNativeFallbackResolver() {
6466
return new ChainedHostResolver(ImmutableList.of(new DnsJavaResolver(), new NativeCacheManipulatingResolver()));
6567
}

browserup-proxy-core/src/main/java/com/browserup/bup/proxy/dns/DnsJavaResolver.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
*
3232
* @deprecated The dnsjava resolver has been deprecated in favor of the standard JVM resolver and will be removed in BUP &gt;2.1.
3333
*/
34+
@Deprecated
3435
public class DnsJavaResolver extends AbstractHostNameRemapper implements AdvancedHostResolver {
3536
private static final Logger log = LoggerFactory.getLogger(DnsJavaResolver.class);
3637

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.browserup.harreader;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.browserup.harreader.jackson.DefaultMapperFactory;
5+
import com.browserup.harreader.jackson.MapperFactory;
6+
import com.browserup.harreader.model.Har;
7+
8+
import java.io.File;
9+
import java.io.IOException;
10+
11+
public class HarReader {
12+
13+
private final MapperFactory mapperFactory;
14+
15+
public HarReader(MapperFactory mapperFactory) {
16+
if (mapperFactory == null) {
17+
throw new IllegalArgumentException("mapperFactory must not be null!");
18+
}
19+
this.mapperFactory = mapperFactory;
20+
}
21+
22+
public HarReader() {
23+
this(new DefaultMapperFactory());
24+
}
25+
26+
public Har readFromFile(File har) throws HarReaderException {
27+
return this.readFromFile(har, HarReaderMode.STRICT);
28+
}
29+
30+
public Har readFromFile(File har, HarReaderMode mode) throws HarReaderException {
31+
ObjectMapper mapper = mapperFactory.instance(mode);
32+
try {
33+
return mapper.readValue(har, Har.class);
34+
} catch (IOException e) {
35+
throw new HarReaderException(e);
36+
}
37+
}
38+
39+
public Har readFromString(String har) throws HarReaderException {
40+
return this.readFromString(har, HarReaderMode.STRICT);
41+
}
42+
43+
public Har readFromString(String har, HarReaderMode mode) throws HarReaderException {
44+
ObjectMapper mapper = mapperFactory.instance(mode);
45+
try {
46+
return mapper.readValue(har, Har.class);
47+
} catch (IOException e) {
48+
throw new HarReaderException(e);
49+
}
50+
}
51+
52+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.browserup.harreader;
2+
3+
public class HarReaderException extends Exception {
4+
5+
public HarReaderException(Throwable cause) {
6+
super(cause);
7+
}
8+
9+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.browserup.harreader;
2+
3+
public enum HarReaderMode {
4+
5+
/**
6+
* Using strict mode enforces some rules.
7+
* When trying to open an invalid HAR file an exception will be thrown.
8+
*/
9+
STRICT,
10+
11+
/**
12+
* Using lax mode you are able to read even invalid HAR files.
13+
* Currently lax mode allows:
14+
* <ul>
15+
* <li>invalid date formats</li>
16+
* </ul>
17+
*/
18+
LAX;
19+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.browserup.harreader.filter;
2+
3+
import com.browserup.harreader.model.HarEntry;
4+
import java.util.function.Predicate;
5+
6+
public interface HarEntriesFilter extends Predicate<HarEntry> {
7+
8+
@Override
9+
boolean test(HarEntry entry);
10+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.browserup.harreader.filter;
2+
3+
import com.browserup.harreader.model.HarEntry;
4+
import java.util.regex.Pattern;
5+
6+
public class HarEntriesUrlPatternFilter implements HarEntriesFilter {
7+
8+
private final Pattern pattern;
9+
10+
public HarEntriesUrlPatternFilter(Pattern pattern) {
11+
this.pattern = pattern;
12+
}
13+
14+
@Override
15+
public boolean test(HarEntry entry) {
16+
return pattern.matcher(entry.getRequest().getUrl()).matches();
17+
}
18+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.browserup.harreader.jackson;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.fasterxml.jackson.databind.module.SimpleModule;
5+
import com.browserup.harreader.HarReaderMode;
6+
7+
import java.util.Date;
8+
9+
public class DefaultMapperFactory implements MapperFactory {
10+
11+
public ObjectMapper instance(HarReaderMode mode) {
12+
ObjectMapper mapper = new ObjectMapper();
13+
SimpleModule module = new SimpleModule();
14+
if (mode == HarReaderMode.LAX) {
15+
module.addDeserializer(Date.class, new ExceptionIgnoringDateDeserializer());
16+
module.addDeserializer(Integer.class, new ExceptionIgnoringIntegerDeserializer());
17+
}
18+
mapper.registerModule(module);
19+
return mapper;
20+
}
21+
22+
}

0 commit comments

Comments
 (0)