Skip to content

Commit

Permalink
Include User-Agent header in HTTP requests (getodk#800)
Browse files Browse the repository at this point in the history
Closes getodk#167
  • Loading branch information
alxndrsn authored and lognaturel committed Mar 31, 2017
1 parent 5c7febb commit 5aff853
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 0 deletions.
1 change: 1 addition & 0 deletions collect_app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ dependencies {
androidTestCompile group: 'com.android.support', name: 'support-annotations', version: '25.1.0'
androidTestCompile group: 'com.android.support.test', name: 'runner', version: '0.5'
androidTestCompile group: 'com.android.support.test', name: 'rules', version: '0.5'
androidTestCompile group: 'com.squareup.okhttp3', name: 'mockwebserver', version: '3.2.0'
}

// Must be at bottom to prevent dependency collisions
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package org.odk.collect.android.utilities;

import android.test.*;

import okhttp3.mockwebserver.*;

import java.net.*;
import java.util.concurrent.TimeUnit;

import org.junit.*;
import org.odk.collect.android.application.*;
import org.opendatakit.httpclientandroidlib.*;
import org.opendatakit.httpclientandroidlib.client.*;
import org.opendatakit.httpclientandroidlib.client.methods.*;
import org.opendatakit.httpclientandroidlib.protocol.*;

import static org.junit.Assert.*;

public class WebUtilsTest {
private MockWebServer server;

@Before
public void setUp() throws Exception {
server = new MockWebServer();
server.start();
// server hangs without a response queued:
server.enqueue(new MockResponse());
}

@After
public void tearDown() throws Exception {
server.shutdown();
}

@Test
public void httpRequests_shouldHaveUseragentHeader() throws Exception {
// given
String url = String.format("http://uname:pword@localhost:%s/some-path", server.getPort());

// when
doRequest(url);

// then
RecordedRequest r = server.takeRequest(1, TimeUnit.MILLISECONDS);
assertEquals("GET /some-path HTTP/1.1", r.getRequestLine());
assertTrue(r.getHeader("User-Agent").matches("Dalvik/.* org.odk.collect.android/.*"));
}

private static void doRequest(String url) throws Exception {
HttpContext localContext = Collect.getInstance().getHttpContext();
HttpClient httpclient = WebUtils.createHttpClient(WebUtils.CONNECTION_TIMEOUT);
HttpGet req = WebUtils.createOpenRosaHttpGet(new URI(url));
HttpResponse response = httpclient.execute(req, localContext);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

import org.kxml2.io.KXmlParser;
import org.kxml2.kdom.Document;
import org.odk.collect.android.BuildConfig;
import org.odk.collect.android.R;
import org.odk.collect.android.application.Collect;
import org.odk.collect.android.preferences.PreferenceKeys;
Expand Down Expand Up @@ -75,6 +76,8 @@
public final class WebUtils {
public static final String t = "WebUtils";

private static final String USER_AGENT_HEADER = "User-Agent";

public static final String OPEN_ROSA_VERSION_HEADER = "X-OpenRosa-Version";
public static final String OPEN_ROSA_VERSION = "1.0";
private static final String DATE_HEADER = "Date";
Expand Down Expand Up @@ -180,6 +183,14 @@ public static final void enablePreemptiveBasicAuth(
}
}

private static final void setCollectHeaders(HttpRequest req) {
String userAgent = String.format("%s %s/%s",
System.getProperty("http.agent"),
BuildConfig.APPLICATION_ID,
BuildConfig.VERSION_NAME);
req.setHeader(USER_AGENT_HEADER, userAgent);
}

private static final void setOpenRosaHeaders(HttpRequest req) {
req.setHeader(OPEN_ROSA_VERSION_HEADER, OPEN_ROSA_VERSION);
GregorianCalendar g = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
Expand All @@ -190,12 +201,14 @@ private static final void setOpenRosaHeaders(HttpRequest req) {

public static final HttpHead createOpenRosaHttpHead(Uri u) {
HttpHead req = new HttpHead(URI.create(u.toString()));
setCollectHeaders(req);
setOpenRosaHeaders(req);
return req;
}

public static final HttpGet createOpenRosaHttpGet(URI uri) {
HttpGet req = new HttpGet();
setCollectHeaders(req);
setOpenRosaHeaders(req);
setGoogleHeaders(req);
req.setURI(uri);
Expand All @@ -220,6 +233,7 @@ public static final void setGoogleHeaders(HttpRequest req) {

public static final HttpPost createOpenRosaHttpPost(Uri u) {
HttpPost req = new HttpPost(URI.create(u.toString()));
setCollectHeaders(req);
setOpenRosaHeaders(req);
setGoogleHeaders(req);
return req;
Expand Down

0 comments on commit 5aff853

Please sign in to comment.