Use desktop User-Agent for Facebook to workaround bug
This commit is contained in:
@@ -83,7 +83,7 @@ public class FacebookKeyserver extends Keyserver {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String get(String fbUsername, ParcelableProxy proxy) throws QueryFailedException {
|
public String get(String fbUsername, ParcelableProxy proxy) throws QueryFailedException {
|
||||||
Log.d(Constants.TAG, "FacebookKeyserver get: " + fbUsername + " using Proxy: " + proxy);
|
Log.d(Constants.TAG, "FacebookKeyserver get: " + fbUsername + " using Proxy: " + proxy.getProxy());
|
||||||
|
|
||||||
String data = query(fbUsername, proxy);
|
String data = query(fbUsername, proxy);
|
||||||
|
|
||||||
@@ -100,14 +100,21 @@ public class FacebookKeyserver extends Keyserver {
|
|||||||
|
|
||||||
private String query(String fbUsername, ParcelableProxy proxy) throws QueryFailedException {
|
private String query(String fbUsername, ParcelableProxy proxy) throws QueryFailedException {
|
||||||
try {
|
try {
|
||||||
String request = String.format(FB_KEY_URL_FORMAT, fbUsername);
|
URL url = new URL(String.format(FB_KEY_URL_FORMAT, fbUsername));
|
||||||
Log.d(Constants.TAG, "fetching from Facebook with: " + request + " proxy: " + proxy);
|
Log.d(Constants.TAG, "fetching from Facebook with: " + url + " proxy: " + proxy.getProxy());
|
||||||
|
|
||||||
URL url = new URL(request);
|
/*
|
||||||
|
* For some URLs such as https://www.facebook.com/adithya.abraham/publickey/download
|
||||||
|
* Facebook redirects to a mobile version (302) and then errors out (500).
|
||||||
|
* Using a desktop User-Agent solves that!
|
||||||
|
*/
|
||||||
|
Request request = new Request.Builder()
|
||||||
|
.url(url)
|
||||||
|
.header("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0")
|
||||||
|
.build();
|
||||||
|
|
||||||
OkHttpClient client = OkHttpClientFactory.getClientPinnedIfAvailable(url, proxy.getProxy());
|
OkHttpClient client = OkHttpClientFactory.getClientPinnedIfAvailable(url, proxy.getProxy());
|
||||||
|
Response response = client.newCall(request).execute();
|
||||||
Response response = client.newCall(new Request.Builder().url(url).build()).execute();
|
|
||||||
|
|
||||||
// contains body both in case of success or failure
|
// contains body both in case of success or failure
|
||||||
String responseBody = response.body().string();
|
String responseBody = response.body().string();
|
||||||
@@ -116,7 +123,8 @@ public class FacebookKeyserver extends Keyserver {
|
|||||||
return responseBody;
|
return responseBody;
|
||||||
} else {
|
} else {
|
||||||
// probably a 404 indicating that the key does not exist
|
// probably a 404 indicating that the key does not exist
|
||||||
throw new QueryFailedException("key for " + fbUsername + " not found on Facebook");
|
throw new QueryFailedException("key for " + fbUsername + " not found on Facebook." +
|
||||||
|
"response:" + response);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -126,7 +134,7 @@ public class FacebookKeyserver extends Keyserver {
|
|||||||
+ (proxy.getProxy() == Proxy.NO_PROXY ? "" : " Using proxy " + proxy.getProxy()));
|
+ (proxy.getProxy() == Proxy.NO_PROXY ? "" : " Using proxy " + proxy.getProxy()));
|
||||||
} catch (TlsHelper.TlsHelperException e) {
|
} catch (TlsHelper.TlsHelperException e) {
|
||||||
Log.e(Constants.TAG, "Exception in cert pinning", e);
|
Log.e(Constants.TAG, "Exception in cert pinning", e);
|
||||||
throw new QueryFailedException("Exception in cert pinning. ");
|
throw new QueryFailedException("Exception in cert pinning.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ public class OkHttpClientFactory {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static OkHttpClient getClientPinnedIfAvailable(URL url, Proxy proxy) throws IOException,
|
public static OkHttpClient getClientPinnedIfAvailable(URL url, Proxy proxy)
|
||||||
TlsHelper.TlsHelperException {
|
throws IOException, TlsHelper.TlsHelperException {
|
||||||
OkHttpClient.Builder builder = new OkHttpClient.Builder();
|
OkHttpClient.Builder builder = new OkHttpClient.Builder();
|
||||||
|
|
||||||
// don't follow any redirects for keyservers, as discussed in the security audit
|
// don't follow any redirects for keyservers, as discussed in the security audit
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class OkHttpKeybaseClient implements KeybaseUrlConnectionClient {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response getUrlResponse(URL url, Proxy proxy, boolean isKeybase) throws IOException {
|
public Response getUrlResponse(URL url, Proxy proxy, boolean isKeybase) throws IOException {
|
||||||
OkHttpClient client = null;
|
OkHttpClient client;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (proxy != null) {
|
if (proxy != null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user