Skip to content

Commit d574d81

Browse files
authored
MapRouletteCommand Optional Proxy Parameter (#657)
* proxy * logging * one more spot * https * fix null * parse string * rm debug * unit test
1 parent c397be2 commit d574d81

File tree

5 files changed

+60
-7
lines changed

5 files changed

+60
-7
lines changed

src/main/java/org/openstreetmap/atlas/checks/maproulette/MapRouletteClient.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.concurrent.ConcurrentHashMap;
1616

1717
import org.apache.commons.lang3.StringUtils;
18+
import org.apache.http.HttpHost;
1819
import org.openstreetmap.atlas.checks.maproulette.data.Challenge;
1920
import org.openstreetmap.atlas.checks.maproulette.data.Project;
2021
import org.openstreetmap.atlas.checks.maproulette.data.ProjectConfiguration;
@@ -83,6 +84,11 @@ public MapRouletteClient(final MapRouletteConfiguration configuration)
8384
this(configuration, new MapRouletteConnection(configuration));
8485
}
8586

87+
public MapRouletteClient(final MapRouletteConfiguration configuration, final HttpHost proxy)
88+
{
89+
this(configuration, new MapRouletteConnection(configuration, proxy));
90+
}
91+
8692
MapRouletteClient(final MapRouletteConfiguration configuration, final TaskLoader taskLoader)
8793
{
8894
this.batch = new ConcurrentHashMap<>();

src/main/java/org/openstreetmap/atlas/checks/maproulette/MapRouletteCommand.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
import java.io.UnsupportedEncodingException;
44
import java.net.URISyntaxException;
55
import java.util.Optional;
6-
import java.util.function.Function;
6+
import java.util.function.BiFunction;
77

8+
import org.apache.http.HttpHost;
89
import org.openstreetmap.atlas.checks.maproulette.data.Challenge;
910
import org.openstreetmap.atlas.checks.maproulette.data.ChallengeDifficulty;
1011
import org.openstreetmap.atlas.checks.maproulette.data.ProjectConfiguration;
@@ -36,6 +37,9 @@ public abstract class MapRouletteCommand extends AtlasLoadingCommand
3637
protected static final Switch<String> OUTPUT_PATH = new Switch<>("outputPath",
3738
"Full path to file where project id, challenge id are stored after creation in MapRoulette.",
3839
StringConverter.IDENTITY);
40+
private static final Switch<String> PROXY = new Switch<>("proxy",
41+
"scheme://hostname:port for an http proxy", StringConverter.IDENTITY,
42+
Optionality.OPTIONAL);
3943

4044
private MapRouletteClient mapRouletteClient;
4145

@@ -89,14 +93,22 @@ protected int onRun(final CommandMap commandMap)
8993
}
9094

9195
protected int onRun(final CommandMap commandMap,
92-
final Function<MapRouletteConfiguration, MapRouletteClient> clientConstructor)
96+
final BiFunction<MapRouletteConfiguration, HttpHost, MapRouletteClient> clientConstructor)
9397
{
9498
final MapRouletteConfiguration mapRoulette = this.fromCommandMap(commandMap);
99+
HttpHost proxy = null;
100+
final Optional<String> proxyOptional = (Optional<String>) commandMap.getOption(PROXY);
101+
if (proxyOptional.isPresent())
102+
{
103+
logger.info("Using Proxy: {}", proxyOptional.get());
104+
proxy = HttpHost.create(proxyOptional.get());
105+
}
106+
95107
if (mapRoulette != null)
96108
{
97109
try
98110
{
99-
this.mapRouletteClient = clientConstructor.apply(mapRoulette);
111+
this.mapRouletteClient = clientConstructor.apply(mapRoulette, proxy);
100112
}
101113
catch (final IllegalArgumentException e)
102114
{
@@ -111,7 +123,7 @@ protected int onRun(final CommandMap commandMap,
111123
@Override
112124
protected SwitchList switches()
113125
{
114-
return super.switches().with(MAP_ROULETTE);
126+
return super.switches().with(MAP_ROULETTE, PROXY);
115127
}
116128

117129
protected void uploadTasks()

src/main/java/org/openstreetmap/atlas/checks/maproulette/MapRouletteConnection.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.List;
1111
import java.util.Set;
1212

13+
import org.apache.http.HttpHost;
1314
import org.apache.http.HttpStatus;
1415
import org.apache.http.client.utils.URIBuilder;
1516
import org.apache.http.entity.ContentType;
@@ -48,9 +49,11 @@ public class MapRouletteConnection implements TaskLoader, Serializable
4849
private static final long serialVersionUID = -8227257938510897604L;
4950
private final MapRouletteConfiguration configuration;
5051
private final URIBuilder uriBuilder;
52+
private final HttpHost proxy;
5153

52-
MapRouletteConnection(final MapRouletteConfiguration configuration)
54+
MapRouletteConnection(final MapRouletteConfiguration configuration, final HttpHost proxy)
5355
{
56+
this.proxy = proxy;
5457
if (configuration == null || !this.isAbleToConnectToMapRoulette(configuration))
5558
{
5659
throw new IllegalArgumentException(
@@ -61,6 +64,11 @@ public class MapRouletteConnection implements TaskLoader, Serializable
6164
.setHost(this.configuration.getServer()).setPort(this.configuration.getPort());
6265
}
6366

67+
MapRouletteConnection(final MapRouletteConfiguration configuration)
68+
{
69+
this(configuration, null);
70+
}
71+
6472
/**
6573
* Will create a challenge if it has not already been created
6674
*
@@ -204,6 +212,7 @@ public long purgeIncompleteTasks(final long challengeID)
204212
public HttpResource setAuth(final HttpResource resource)
205213
{
206214
resource.setHeader(KEY_API_KEY, this.configuration.getApiKey());
215+
resource.setProxy(this.proxy);
207216
return resource;
208217
}
209218

@@ -260,6 +269,7 @@ private boolean isAbleToConnectToMapRoulette(final MapRouletteConfiguration conf
260269
configuration.getScheme(), configuration.getServer(),
261270
configuration.getPort());
262271
final GetResource homepage = new GetResource(serverConnection);
272+
homepage.setProxy(this.proxy);
263273
final int statusCode = homepage.getStatusCode();
264274
if (statusCode != HttpStatus.SC_OK)
265275
{

src/test/java/org/openstreetmap/atlas/checks/maproulette/MapRouletteUploadCommandTest.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,14 @@ public void testUndiscoverableSubsetChallenges()
156156
Arrays.asList("SomeOtherCheck", "AnotherCheck"));
157157
}
158158

159+
@Test
160+
public void testproxy()
161+
{
162+
final String[] additionalArguments = { "-proxy=http://127.0.0.1:80" };
163+
final TestMapRouletteConnection connection = this.run(additionalArguments);
164+
Assert.assertEquals("http://127.0.0.1:80", connection.getProxy().toString());
165+
}
166+
159167
@Before
160168
public void writeFiles()
161169
{
@@ -196,13 +204,17 @@ private TestMapRouletteConnection run(final String[] additionalArguments)
196204
// Set up some arguments
197205
final MapRouletteCommand command = new MapRouletteUploadCommand();
198206
final String[] arguments = { String.format("-logfiles=%s", FOLDER.getPathString()),
199-
MAPROULETTE_CONFIG };
207+
MAPROULETTE_CONFIG, };
200208
final CommandMap map = command
201209
.getCommandMap((String[]) ArrayUtils.addAll(arguments, additionalArguments));
202210
final TestMapRouletteConnection connection = new TestMapRouletteConnection();
203211

204212
// Run the command
205-
command.onRun(map, configuration -> new MapRouletteClient(configuration, connection));
213+
command.onRun(map, (configuration, proxy) ->
214+
{
215+
connection.setProxy(proxy);
216+
return new MapRouletteClient(configuration, connection);
217+
});
206218

207219
return connection;
208220
}

src/test/java/org/openstreetmap/atlas/checks/maproulette/TestMapRouletteConnection.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.Map;
88
import java.util.Set;
99

10+
import org.apache.http.HttpHost;
1011
import org.openstreetmap.atlas.checks.maproulette.data.Challenge;
1112
import org.openstreetmap.atlas.checks.maproulette.data.Project;
1213
import org.openstreetmap.atlas.checks.maproulette.data.Task;
@@ -17,13 +18,15 @@
1718
* A stub MapRouletteConnection that doesn't actually connect to anything.
1819
*
1920
* @author nachtm
21+
* @author bbreithaupt
2022
*/
2123
public class TestMapRouletteConnection implements TaskLoader
2224
{
2325

2426
private final Map<Project, Set<Challenge>> projectToChallenges;
2527
private final Map<Long, Set<Task>> challengeToTasks;
2628
private Map<String, Long> projectNameToId;
29+
private HttpHost proxy = null;
2730

2831
public TestMapRouletteConnection()
2932
{
@@ -68,6 +71,11 @@ public String getConnectionInfo()
6871
return "";
6972
}
7073

74+
public HttpHost getProxy()
75+
{
76+
return this.proxy;
77+
}
78+
7179
@Override
7280
public long purgeIncompleteTasks(final long challengeID) throws URISyntaxException
7381
{
@@ -86,6 +94,11 @@ public void setProjectNameToId(final Map<String, Long> projectIdMap)
8694
this.projectNameToId = projectIdMap;
8795
}
8896

97+
public void setProxy(final HttpHost proxy)
98+
{
99+
this.proxy = proxy;
100+
}
101+
89102
public Set<Task> tasksForChallenge(final Challenge challenge)
90103
{
91104
return this.challengeToTasks.get(challenge.getId());

0 commit comments

Comments
 (0)