make use of proxies a Keyserver property
This commit is contained in:
@@ -35,7 +35,7 @@ public class CloudSearch {
|
||||
private final static long SECONDS = 1000;
|
||||
|
||||
public static ArrayList<ImportKeysListEntry> search(
|
||||
@NonNull final String query, Preferences.CloudSearchPrefs cloudPrefs, @NonNull final Proxy proxy)
|
||||
@NonNull final String query, Preferences.CloudSearchPrefs cloudPrefs, @NonNull Proxy proxy)
|
||||
throws Keyserver.CloudSearchFailureException {
|
||||
final ArrayList<Keyserver> servers = new ArrayList<>();
|
||||
|
||||
@@ -43,10 +43,10 @@ public class CloudSearch {
|
||||
final Vector<Keyserver.CloudSearchFailureException> problems = new Vector<>();
|
||||
|
||||
if (cloudPrefs.searchKeyserver) {
|
||||
servers.add(new HkpKeyserver(cloudPrefs.keyserver));
|
||||
servers.add(new HkpKeyserver(cloudPrefs.keyserver, proxy));
|
||||
}
|
||||
if (cloudPrefs.searchKeybase) {
|
||||
servers.add(new KeybaseKeyserver());
|
||||
servers.add(new KeybaseKeyserver(proxy));
|
||||
}
|
||||
final ImportKeysList results = new ImportKeysList(servers.size());
|
||||
|
||||
@@ -56,7 +56,7 @@ public class CloudSearch {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
results.addAll(keyserver.search(query, proxy));
|
||||
results.addAll(keyserver.search(query));
|
||||
} catch (Keyserver.CloudSearchFailureException e) {
|
||||
problems.add(e);
|
||||
}
|
||||
|
||||
@@ -76,6 +76,7 @@ public class HkpKeyserver extends Keyserver {
|
||||
|
||||
private String mHost;
|
||||
private short mPort;
|
||||
private Proxy mProxy;
|
||||
private boolean mSecure;
|
||||
|
||||
/**
|
||||
@@ -152,17 +153,17 @@ public class HkpKeyserver extends Keyserver {
|
||||
* connect using {@link #PORT_DEFAULT}. However, port may be specified after colon
|
||||
* ("<code>hostname:port</code>", eg. "<code>p80.pool.sks-keyservers.net:80</code>").
|
||||
*/
|
||||
public HkpKeyserver(String hostAndPort) {
|
||||
public HkpKeyserver(String hostAndPort, Proxy proxy) {
|
||||
String host = hostAndPort;
|
||||
short port = PORT_DEFAULT;
|
||||
boolean secure = false;
|
||||
String[] parts = hostAndPort.split(":");
|
||||
if (parts.length > 1) {
|
||||
if (!parts[0].contains(".")) { // This is not a domain or ip, so it must be a protocol name
|
||||
if (parts[0].equalsIgnoreCase("hkps") || parts[0].equalsIgnoreCase("https")) {
|
||||
if ("hkps".equalsIgnoreCase(parts[0]) || "https".equalsIgnoreCase(parts[0])) {
|
||||
secure = true;
|
||||
port = PORT_DEFAULT_HKPS;
|
||||
} else if (!parts[0].equalsIgnoreCase("hkp") && !parts[0].equalsIgnoreCase("http")) {
|
||||
} else if (!"hkp".equalsIgnoreCase(parts[0]) && !"http".equalsIgnoreCase(parts[0])) {
|
||||
throw new IllegalArgumentException("Protocol " + parts[0] + " is unknown");
|
||||
}
|
||||
host = parts[1];
|
||||
@@ -179,16 +180,18 @@ public class HkpKeyserver extends Keyserver {
|
||||
}
|
||||
mHost = host;
|
||||
mPort = port;
|
||||
mProxy = proxy;
|
||||
mSecure = secure;
|
||||
}
|
||||
|
||||
public HkpKeyserver(String host, short port) {
|
||||
this(host, port, false);
|
||||
public HkpKeyserver(String host, short port, Proxy proxy) {
|
||||
this(host, port, proxy, false);
|
||||
}
|
||||
|
||||
public HkpKeyserver(String host, short port, boolean secure) {
|
||||
public HkpKeyserver(String host, short port, Proxy proxy, boolean secure) {
|
||||
mHost = host;
|
||||
mPort = port;
|
||||
mProxy = proxy;
|
||||
mSecure = secure;
|
||||
}
|
||||
|
||||
@@ -253,7 +256,7 @@ public class HkpKeyserver extends Keyserver {
|
||||
* Results are sorted by creation date of key!
|
||||
*/
|
||||
@Override
|
||||
public ArrayList<ImportKeysListEntry> search(String query, Proxy proxy) throws QueryFailedException,
|
||||
public ArrayList<ImportKeysListEntry> search(String query) throws QueryFailedException,
|
||||
QueryNeedsRepairException {
|
||||
ArrayList<ImportKeysListEntry> results = new ArrayList<>();
|
||||
|
||||
@@ -271,7 +274,7 @@ public class HkpKeyserver extends Keyserver {
|
||||
|
||||
String data;
|
||||
try {
|
||||
data = query(request, proxy);
|
||||
data = query(request, mProxy);
|
||||
} catch (HttpError e) {
|
||||
if (e.getData() != null) {
|
||||
Log.d(Constants.TAG, "returned error data: " + e.getData().toLowerCase(Locale.ENGLISH));
|
||||
@@ -375,12 +378,12 @@ public class HkpKeyserver extends Keyserver {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String get(String keyIdHex, @NonNull Proxy proxy) throws QueryFailedException {
|
||||
public String get(String keyIdHex) throws QueryFailedException {
|
||||
String request = "/pks/lookup?op=get&options=mr&search=" + keyIdHex;
|
||||
Log.d(Constants.TAG, "hkp keyserver get: " + request + " using Proxy: " + proxy);
|
||||
Log.d(Constants.TAG, "hkp keyserver get: " + request + " using Proxy: " + mProxy);
|
||||
String data;
|
||||
try {
|
||||
data = query(request, proxy);
|
||||
data = query(request, mProxy);
|
||||
} catch (HttpError httpError) {
|
||||
Log.d(Constants.TAG, "Failed to get key at HkpKeyserver", httpError);
|
||||
throw new QueryFailedException("not found");
|
||||
@@ -396,7 +399,7 @@ public class HkpKeyserver extends Keyserver {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(String armoredKey, Proxy proxy) throws AddKeyException {
|
||||
public void add(String armoredKey) throws AddKeyException {
|
||||
try {
|
||||
String path = "/pks/add";
|
||||
String params;
|
||||
@@ -407,7 +410,7 @@ public class HkpKeyserver extends Keyserver {
|
||||
}
|
||||
URL url = new URL(getUrlPrefix() + mHost + ":" + mPort + path);
|
||||
|
||||
Log.d(Constants.TAG, "hkp keyserver add: " + url.toString());
|
||||
Log.d(Constants.TAG, "hkp keyserver add: " + url);
|
||||
Log.d(Constants.TAG, "params: " + params);
|
||||
|
||||
RequestBody body = RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"), params);
|
||||
@@ -419,7 +422,7 @@ public class HkpKeyserver extends Keyserver {
|
||||
.post(body)
|
||||
.build();
|
||||
|
||||
Response response = getClient(url, proxy).newCall(request).execute();
|
||||
Response response = getClient(url, mProxy).newCall(request).execute();
|
||||
|
||||
Log.d(Constants.TAG, "response code: " + response.code());
|
||||
Log.d(Constants.TAG, "answer: " + response.body().string());
|
||||
@@ -445,7 +448,7 @@ public class HkpKeyserver extends Keyserver {
|
||||
* @return A responsible Keyserver or null if not found.
|
||||
* TODO: Add proxy functionality
|
||||
*/
|
||||
public static HkpKeyserver resolve(String domain) {
|
||||
public static HkpKeyserver resolve(String domain, Proxy proxy) {
|
||||
try {
|
||||
Record[] records = new Client().query(new Question("_hkp._tcp." + domain, Record.TYPE.SRV)).getAnswers();
|
||||
if (records.length > 0) {
|
||||
@@ -460,7 +463,7 @@ public class HkpKeyserver extends Keyserver {
|
||||
Record record = records[0]; // This is our best choice
|
||||
if (record.getPayload().getType() == Record.TYPE.SRV) {
|
||||
return new HkpKeyserver(((SRV) record.getPayload()).getName(),
|
||||
(short) ((SRV) record.getPayload()).getPort());
|
||||
(short) ((SRV) record.getPayload()).getPort(), proxy);
|
||||
}
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
|
||||
@@ -33,10 +33,15 @@ import java.util.List;
|
||||
|
||||
public class KeybaseKeyserver extends Keyserver {
|
||||
public static final String ORIGIN = "keybase:keybase.io";
|
||||
private String mQuery;
|
||||
|
||||
Proxy mProxy;
|
||||
|
||||
public KeybaseKeyserver(Proxy proxy) {
|
||||
mProxy = proxy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<ImportKeysListEntry> search(String query, Proxy proxy) throws QueryFailedException,
|
||||
public ArrayList<ImportKeysListEntry> search(String query) throws QueryFailedException,
|
||||
QueryNeedsRepairException {
|
||||
ArrayList<ImportKeysListEntry> results = new ArrayList<>();
|
||||
|
||||
@@ -47,14 +52,13 @@ public class KeybaseKeyserver extends Keyserver {
|
||||
if (query.isEmpty()) {
|
||||
throw new QueryTooShortException();
|
||||
}
|
||||
mQuery = query;
|
||||
|
||||
try {
|
||||
KeybaseQuery keybaseQuery = new KeybaseQuery(new OkHttpKeybaseClient());
|
||||
keybaseQuery.setProxy(proxy);
|
||||
keybaseQuery.setProxy(mProxy);
|
||||
Iterable<Match> matches = keybaseQuery.search(query);
|
||||
for (Match match : matches) {
|
||||
results.add(makeEntry(match));
|
||||
results.add(makeEntry(match, query));
|
||||
}
|
||||
} catch (KeybaseException e) {
|
||||
Log.e(Constants.TAG, "keybase result parsing error", e);
|
||||
@@ -64,9 +68,9 @@ public class KeybaseKeyserver extends Keyserver {
|
||||
return results;
|
||||
}
|
||||
|
||||
private ImportKeysListEntry makeEntry(Match match) throws KeybaseException {
|
||||
private ImportKeysListEntry makeEntry(Match match, String query) throws KeybaseException {
|
||||
final ImportKeysListEntry entry = new ImportKeysListEntry();
|
||||
entry.setQuery(mQuery);
|
||||
entry.setQuery(query);
|
||||
entry.addOrigin(ORIGIN);
|
||||
|
||||
entry.setRevoked(false); // keybase doesn’t say anything about revoked keys
|
||||
@@ -102,10 +106,10 @@ public class KeybaseKeyserver extends Keyserver {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String get(String id, Proxy proxy) throws QueryFailedException {
|
||||
public String get(String id) throws QueryFailedException {
|
||||
try {
|
||||
KeybaseQuery keybaseQuery = new KeybaseQuery(new OkHttpKeybaseClient());
|
||||
keybaseQuery.setProxy(proxy);
|
||||
keybaseQuery.setProxy(mProxy);
|
||||
return User.keyForUsername(keybaseQuery, id);
|
||||
} catch (KeybaseException e) {
|
||||
throw new QueryFailedException(e.getMessage());
|
||||
@@ -113,7 +117,7 @@ public class KeybaseKeyserver extends Keyserver {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(String armoredKey, Proxy proxy) throws AddKeyException {
|
||||
public void add(String armoredKey) throws AddKeyException {
|
||||
throw new AddKeyException();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,12 +69,12 @@ public abstract class Keyserver {
|
||||
private static final long serialVersionUID = -507574859137295530L;
|
||||
}
|
||||
|
||||
public abstract List<ImportKeysListEntry> search(String query, Proxy proxy)
|
||||
public abstract List<ImportKeysListEntry> search(String query)
|
||||
throws QueryFailedException, QueryNeedsRepairException;
|
||||
|
||||
public abstract String get(String keyIdHex, Proxy proxy) throws QueryFailedException;
|
||||
public abstract String get(String keyIdHex) throws QueryFailedException;
|
||||
|
||||
public abstract void add(String armoredKey, Proxy proxy) throws AddKeyException;
|
||||
public abstract void add(String armoredKey) throws AddKeyException;
|
||||
|
||||
public static String readAll(InputStream in, String encoding) throws IOException {
|
||||
ByteArrayOutputStream raw = new ByteArrayOutputStream();
|
||||
|
||||
@@ -188,7 +188,7 @@ public class ImportOperation extends BaseOperation<ImportKeyringParcel> {
|
||||
// Make sure we have the keyserver instance cached
|
||||
if (keyServer == null) {
|
||||
log.add(LogType.MSG_IMPORT_KEYSERVER, 1, keyServerUri);
|
||||
keyServer = new HkpKeyserver(keyServerUri);
|
||||
keyServer = new HkpKeyserver(keyServerUri, proxy);
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -197,10 +197,10 @@ public class ImportOperation extends BaseOperation<ImportKeyringParcel> {
|
||||
if (entry.mExpectedFingerprint != null) {
|
||||
log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER, 2, "0x" +
|
||||
entry.mExpectedFingerprint.substring(24));
|
||||
data = keyServer.get("0x" + entry.mExpectedFingerprint, proxy).getBytes();
|
||||
data = keyServer.get("0x" + entry.mExpectedFingerprint).getBytes();
|
||||
} else {
|
||||
log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER, 2, entry.mKeyIdHex);
|
||||
data = keyServer.get(entry.mKeyIdHex, proxy).getBytes();
|
||||
data = keyServer.get(entry.mKeyIdHex).getBytes();
|
||||
}
|
||||
key = UncachedKeyRing.decodeFromData(data);
|
||||
if (key != null) {
|
||||
@@ -218,12 +218,12 @@ public class ImportOperation extends BaseOperation<ImportKeyringParcel> {
|
||||
if (entry.mKeybaseName != null) {
|
||||
// Make sure we have this cached
|
||||
if (keybaseServer == null) {
|
||||
keybaseServer = new KeybaseKeyserver();
|
||||
keybaseServer = new KeybaseKeyserver(proxy);
|
||||
}
|
||||
|
||||
try {
|
||||
log.add(LogType.MSG_IMPORT_FETCH_KEYBASE, 2, entry.mKeybaseName);
|
||||
byte[] data = keybaseServer.get(entry.mKeybaseName, proxy).getBytes();
|
||||
byte[] data = keybaseServer.get(entry.mKeybaseName).getBytes();
|
||||
UncachedKeyRing keybaseKey = UncachedKeyRing.decodeFromData(data);
|
||||
|
||||
// If there already is a key, merge the two
|
||||
|
||||
@@ -105,7 +105,7 @@ public class UploadOperation extends BaseOperation<UploadKeyringParcel> {
|
||||
|
||||
HkpKeyserver hkpKeyserver;
|
||||
{
|
||||
hkpKeyserver = new HkpKeyserver(uploadInput.mKeyserver);
|
||||
hkpKeyserver = new HkpKeyserver(uploadInput.mKeyserver, proxy);
|
||||
log.add(LogType.MSG_UPLOAD_SERVER, 1, hkpKeyserver.toString());
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ public class UploadOperation extends BaseOperation<UploadKeyringParcel> {
|
||||
return new UploadResult(UploadResult.RESULT_ERROR, log);
|
||||
}
|
||||
|
||||
return uploadKeyRingToServer(log, hkpKeyserver, keyring, proxy);
|
||||
return uploadKeyRingToServer(log, hkpKeyserver, keyring);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -155,7 +155,7 @@ public class UploadOperation extends BaseOperation<UploadKeyringParcel> {
|
||||
|
||||
@NonNull
|
||||
private UploadResult uploadKeyRingToServer(
|
||||
OperationLog log, HkpKeyserver server, CanonicalizedPublicKeyRing keyring, Proxy proxy) {
|
||||
OperationLog log, HkpKeyserver server, CanonicalizedPublicKeyRing keyring) {
|
||||
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||
ArmoredOutputStream aos = null;
|
||||
@@ -166,7 +166,7 @@ public class UploadOperation extends BaseOperation<UploadKeyringParcel> {
|
||||
aos.close();
|
||||
|
||||
String armoredKey = bos.toString("UTF-8");
|
||||
server.add(armoredKey, proxy);
|
||||
server.add(armoredKey);
|
||||
|
||||
updateProgress(R.string.progress_uploading, 1, 1);
|
||||
|
||||
|
||||
@@ -74,9 +74,9 @@ public class EmailKeyHelper {
|
||||
// Try _hkp._tcp SRV record first
|
||||
String[] mailparts = mail.split("@");
|
||||
if (mailparts.length == 2) {
|
||||
HkpKeyserver hkp = HkpKeyserver.resolve(mailparts[1]);
|
||||
HkpKeyserver hkp = HkpKeyserver.resolve(mailparts[1], proxy);
|
||||
if (hkp != null) {
|
||||
keys.addAll(getEmailKeys(mail, hkp, proxy));
|
||||
keys.addAll(getEmailKeys(mail, hkp));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,18 +84,17 @@ public class EmailKeyHelper {
|
||||
// Most users don't have the SRV record, so ask a default server as well
|
||||
String server = Preferences.getPreferences(context).getPreferredKeyserver();
|
||||
if (server != null) {
|
||||
HkpKeyserver hkp = new HkpKeyserver(server);
|
||||
keys.addAll(getEmailKeys(mail, hkp, proxy));
|
||||
HkpKeyserver hkp = new HkpKeyserver(server, proxy);
|
||||
keys.addAll(getEmailKeys(mail, hkp));
|
||||
}
|
||||
}
|
||||
return keys;
|
||||
}
|
||||
|
||||
public static List<ImportKeysListEntry> getEmailKeys(String mail, Keyserver keyServer,
|
||||
Proxy proxy) {
|
||||
public static List<ImportKeysListEntry> getEmailKeys(String mail, Keyserver keyServer) {
|
||||
Set<ImportKeysListEntry> keys = new HashSet<>();
|
||||
try {
|
||||
for (ImportKeysListEntry key : keyServer.search(mail, proxy)) {
|
||||
for (ImportKeysListEntry key : keyServer.search(mail)) {
|
||||
if (key.isRevoked() || key.isExpired()) continue;
|
||||
for (String userId : key.getUserIds()) {
|
||||
if (userId.toLowerCase().contains(mail.toLowerCase(Locale.ENGLISH))) {
|
||||
|
||||
Reference in New Issue
Block a user