mirror of
https://github.com/moparisthebest/open-keychain
synced 2025-02-25 16:01:52 -05:00
Keys found on multiple servers are now imported from all of them
This commit is contained in:
parent
7de86a09bc
commit
c13ccda658
@ -278,7 +278,7 @@ public class HkpKeyserver extends Keyserver {
|
|||||||
while (matcher.find()) {
|
while (matcher.find()) {
|
||||||
final ImportKeysListEntry entry = new ImportKeysListEntry();
|
final ImportKeysListEntry entry = new ImportKeysListEntry();
|
||||||
entry.setQuery(query);
|
entry.setQuery(query);
|
||||||
entry.setOrigin(getUrlPrefix() + mHost + ":" + mPort);
|
entry.addOrigin(getUrlPrefix() + mHost + ":" + mPort);
|
||||||
|
|
||||||
int bitSize = Integer.parseInt(matcher.group(3));
|
int bitSize = Integer.parseInt(matcher.group(3));
|
||||||
entry.setBitStrength(bitSize);
|
entry.setBitStrength(bitSize);
|
||||||
|
@ -67,6 +67,9 @@ public class ImportKeysList extends ArrayList<ImportKeysListEntry> {
|
|||||||
existing.setExpired(true);
|
existing.setExpired(true);
|
||||||
modified = true;
|
modified = true;
|
||||||
}
|
}
|
||||||
|
for (String origin : incoming.getOrigins()) {
|
||||||
|
existing.addOrigin(origin);
|
||||||
|
}
|
||||||
ArrayList<String> incomingIDs = incoming.getUserIds();
|
ArrayList<String> incomingIDs = incoming.getUserIds();
|
||||||
ArrayList<String> existingIDs = existing.getUserIds();
|
ArrayList<String> existingIDs = existing.getUserIds();
|
||||||
for (String incomingID : incomingIDs) {
|
for (String incomingID : incomingIDs) {
|
||||||
|
@ -46,7 +46,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
|
|||||||
private String mPrimaryUserId;
|
private String mPrimaryUserId;
|
||||||
private String mExtraData;
|
private String mExtraData;
|
||||||
private String mQuery;
|
private String mQuery;
|
||||||
private String mOrigin;
|
private ArrayList<String> mOrigins;
|
||||||
private Integer mHashCode = null;
|
private Integer mHashCode = null;
|
||||||
|
|
||||||
private boolean mSelected;
|
private boolean mSelected;
|
||||||
@ -70,7 +70,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
|
|||||||
dest.writeByte((byte) (mSecretKey ? 1 : 0));
|
dest.writeByte((byte) (mSecretKey ? 1 : 0));
|
||||||
dest.writeByte((byte) (mSelected ? 1 : 0));
|
dest.writeByte((byte) (mSelected ? 1 : 0));
|
||||||
dest.writeString(mExtraData);
|
dest.writeString(mExtraData);
|
||||||
dest.writeString(mOrigin);
|
dest.writeStringList(mOrigins);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final Creator<ImportKeysListEntry> CREATOR = new Creator<ImportKeysListEntry>() {
|
public static final Creator<ImportKeysListEntry> CREATOR = new Creator<ImportKeysListEntry>() {
|
||||||
@ -90,7 +90,8 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
|
|||||||
vr.mSecretKey = source.readByte() == 1;
|
vr.mSecretKey = source.readByte() == 1;
|
||||||
vr.mSelected = source.readByte() == 1;
|
vr.mSelected = source.readByte() == 1;
|
||||||
vr.mExtraData = source.readString();
|
vr.mExtraData = source.readString();
|
||||||
vr.mOrigin = source.readString();
|
vr.mOrigins = new ArrayList<String>();
|
||||||
|
source.readStringList(vr.mOrigins);
|
||||||
|
|
||||||
return vr;
|
return vr;
|
||||||
}
|
}
|
||||||
@ -230,12 +231,12 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
|
|||||||
mQuery = query;
|
mQuery = query;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getOrigin() {
|
public ArrayList<String> getOrigins() {
|
||||||
return mOrigin;
|
return mOrigins;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOrigin(String origin) {
|
public void addOrigin(String origin) {
|
||||||
mOrigin = origin;
|
mOrigins.add(origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -247,6 +248,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable {
|
|||||||
// do not select by default
|
// do not select by default
|
||||||
mSelected = false;
|
mSelected = false;
|
||||||
mUserIds = new ArrayList<String>();
|
mUserIds = new ArrayList<String>();
|
||||||
|
mOrigins = new ArrayList<String>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -63,7 +63,7 @@ public class KeybaseKeyserver extends Keyserver {
|
|||||||
private ImportKeysListEntry makeEntry(Match match) throws KeybaseException {
|
private ImportKeysListEntry makeEntry(Match match) throws KeybaseException {
|
||||||
final ImportKeysListEntry entry = new ImportKeysListEntry();
|
final ImportKeysListEntry entry = new ImportKeysListEntry();
|
||||||
entry.setQuery(mQuery);
|
entry.setQuery(mQuery);
|
||||||
entry.setOrigin(ORIGIN);
|
entry.addOrigin(ORIGIN);
|
||||||
|
|
||||||
entry.setRevoked(false); // keybase doesn’t say anything about revoked keys
|
entry.setRevoked(false); // keybase doesn’t say anything about revoked keys
|
||||||
|
|
||||||
|
@ -652,27 +652,35 @@ public class KeychainIntentService extends IntentService implements Progressable
|
|||||||
for (ImportKeysListEntry entry : entries) {
|
for (ImportKeysListEntry entry : entries) {
|
||||||
try {
|
try {
|
||||||
Keyserver server;
|
Keyserver server;
|
||||||
if (entry.getOrigin() == null) {
|
ArrayList<String> origins = entry.getOrigins();
|
||||||
server = new HkpKeyserver(keyServer);
|
if (origins == null) {
|
||||||
} else if (KeybaseKeyserver.ORIGIN.equals(entry.getOrigin())) {
|
origins = new ArrayList<String>();
|
||||||
server = new KeybaseKeyserver();
|
|
||||||
} else {
|
|
||||||
server = new HkpKeyserver(entry.getOrigin());
|
|
||||||
}
|
}
|
||||||
|
if (origins.isEmpty()) {
|
||||||
// if available use complete fingerprint for get request
|
origins.add(keyServer);
|
||||||
byte[] downloadedKeyBytes;
|
|
||||||
if (KeybaseKeyserver.ORIGIN.equals(entry.getOrigin())) {
|
|
||||||
downloadedKeyBytes = server.get(entry.getExtraData()).getBytes();
|
|
||||||
} else if (entry.getFingerprintHex() != null) {
|
|
||||||
downloadedKeyBytes = server.get("0x" + entry.getFingerprintHex()).getBytes();
|
|
||||||
} else {
|
|
||||||
downloadedKeyBytes = server.get(entry.getKeyIdHex()).getBytes();
|
|
||||||
}
|
}
|
||||||
|
for (String origin : origins) {
|
||||||
|
if (KeybaseKeyserver.ORIGIN.equals(origin)) {
|
||||||
|
server = new KeybaseKeyserver();
|
||||||
|
} else {
|
||||||
|
server = new HkpKeyserver(origin);
|
||||||
|
}
|
||||||
|
Log.d(Constants.TAG, "IMPORTING " + entry.getKeyIdHex() + " FROM: " + server);
|
||||||
|
|
||||||
// save key bytes in entry object for doing the
|
// if available use complete fingerprint for get request
|
||||||
// actual import afterwards
|
byte[] downloadedKeyBytes;
|
||||||
keyRings.add(new ParcelableKeyRing(downloadedKeyBytes, entry.getFingerprintHex()));
|
if (KeybaseKeyserver.ORIGIN.equals(origin)) {
|
||||||
|
downloadedKeyBytes = server.get(entry.getExtraData()).getBytes();
|
||||||
|
} else if (entry.getFingerprintHex() != null) {
|
||||||
|
downloadedKeyBytes = server.get("0x" + entry.getFingerprintHex()).getBytes();
|
||||||
|
} else {
|
||||||
|
downloadedKeyBytes = server.get(entry.getKeyIdHex()).getBytes();
|
||||||
|
}
|
||||||
|
|
||||||
|
// save key bytes in entry object for doing the
|
||||||
|
// actual import afterwards
|
||||||
|
keyRings.add(new ParcelableKeyRing(downloadedKeyBytes, entry.getFingerprintHex()));
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
sendErrorToHandler(e);
|
sendErrorToHandler(e);
|
||||||
}
|
}
|
||||||
|
@ -4,34 +4,34 @@
|
|||||||
<item android:state_pressed="true" >
|
<item android:state_pressed="true" >
|
||||||
<shape android:shape="rectangle" >
|
<shape android:shape="rectangle" >
|
||||||
<padding
|
<padding
|
||||||
android:bottom="2dip"
|
android:bottom="3dip"
|
||||||
android:left="2dip"
|
android:left="2dip"
|
||||||
android:right="2dip"
|
android:right="2dip"
|
||||||
android:top="2dip" />
|
android:top="1dip" />
|
||||||
<corners android:radius="6dip" />
|
<corners android:radius="6dip" />
|
||||||
<solid android:color="#4747a4" />
|
<solid android:color="#4444cc" />
|
||||||
</shape>
|
</shape>
|
||||||
</item>
|
</item>
|
||||||
<item android:state_focused="true">
|
<item android:state_focused="true">
|
||||||
<shape android:shape="rectangle" >
|
<shape android:shape="rectangle" >
|
||||||
<padding
|
<padding
|
||||||
android:bottom="2dip"
|
android:bottom="3dip"
|
||||||
android:left="2dip"
|
android:left="2dip"
|
||||||
android:right="2dip"
|
android:right="2dip"
|
||||||
android:top="2dip" />
|
android:top="1dip" />
|
||||||
<corners android:radius="6dip" />
|
<corners android:radius="6dip" />
|
||||||
<solid android:color="#4747a4"/>
|
<solid android:color="#4444cc"/>
|
||||||
</shape>
|
</shape>
|
||||||
</item>
|
</item>
|
||||||
<item >
|
<item >
|
||||||
<shape android:shape="rectangle" >
|
<shape android:shape="rectangle" >
|
||||||
<padding
|
<padding
|
||||||
android:bottom="2dip"
|
android:bottom="3dip"
|
||||||
android:left="2dip"
|
android:left="2dip"
|
||||||
android:right="2dip"
|
android:right="2dip"
|
||||||
android:top="2dip" />
|
android:top="1dip" />
|
||||||
<corners android:radius="6dip" />
|
<corners android:radius="6dip" />
|
||||||
<solid android:color="#5c5cb8" />
|
<solid android:color="#5555ee" />
|
||||||
</shape>
|
</shape>
|
||||||
</item>
|
</item>
|
||||||
</selector>
|
</selector>
|
@ -48,8 +48,6 @@
|
|||||||
android:text="rotate"
|
android:text="rotate"
|
||||||
android:textColor="#ffffffff"
|
android:textColor="#ffffffff"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:paddingTop="2dp"
|
|
||||||
android:paddingBottom="2dp"
|
|
||||||
android:background="@drawable/button_rounded_blue"
|
android:background="@drawable/button_rounded_blue"
|
||||||
/>
|
/>
|
||||||
<ImageButton
|
<ImageButton
|
||||||
|
Loading…
x
Reference in New Issue
Block a user