diff options
author | Dominik Schürmann <dominik@dominikschuermann.de> | 2015-12-10 13:16:28 +0100 |
---|---|---|
committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2015-12-10 13:16:28 +0100 |
commit | 1b141c61e15526d8a979c917b632bba91b77b859 (patch) | |
tree | f7085ba8e0143e3c023c2ba3412fea8333f99ebc /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations | |
parent | a5d7a8ddf2c0fd03b386284bf0cdde9aba8dcee3 (diff) | |
parent | f29280bbb268d112426c6662e1227118819fb904 (diff) | |
download | open-keychain-1b141c61e15526d8a979c917b632bba91b77b859.tar.gz open-keychain-1b141c61e15526d8a979c917b632bba91b77b859.tar.bz2 open-keychain-1b141c61e15526d8a979c917b632bba91b77b859.zip |
Merge pull request #1610 from open-keychain/facebook
Basic Facebook Support
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations')
2 files changed, 59 insertions, 0 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java index 70288123f..a20181a00 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java @@ -38,6 +38,7 @@ import android.support.annotation.NonNull; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.keyimport.FacebookKeyserver; import org.sufficientlysecure.keychain.keyimport.HkpKeyserver; import org.sufficientlysecure.keychain.keyimport.KeybaseKeyserver; import org.sufficientlysecure.keychain.keyimport.Keyserver; @@ -156,6 +157,7 @@ public class ImportOperation extends BaseOperation<ImportKeyringParcel> { double progSteps = 100.0 / num; KeybaseKeyserver keybaseServer = null; + FacebookKeyserver facebookServer = null; HkpKeyserver keyServer = null; // iterate over all entries @@ -228,6 +230,12 @@ public class ImportOperation extends BaseOperation<ImportKeyringParcel> { byte[] data = keybaseServer.get(entry.mKeybaseName).getBytes(); UncachedKeyRing keybaseKey = UncachedKeyRing.decodeFromData(data); + if (keybaseKey != null) { + log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER_OK, 3); + } else { + log.add(LogType.MSG_IMPORT_FETCH_ERROR_DECODE, 3); + } + // If there already is a key, merge the two if (key != null && keybaseKey != null) { log.add(LogType.MSG_IMPORT_MERGE, 3); @@ -247,6 +255,44 @@ public class ImportOperation extends BaseOperation<ImportKeyringParcel> { log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage()); } } + + // if the key is from Facebook, fetch from there + if (entry.mFbUsername != null) { + // Make sure we have this cached + if (facebookServer == null) { + facebookServer = new FacebookKeyserver(proxy); + } + + try { + log.add(LogType.MSG_IMPORT_FETCH_FACEBOOK, 2, entry.mFbUsername); + byte[] data = facebookServer.get(entry.mFbUsername).getBytes(); + UncachedKeyRing facebookKey = UncachedKeyRing.decodeFromData(data); + + if (facebookKey != null) { + log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER_OK, 3); + } else { + log.add(LogType.MSG_IMPORT_FETCH_ERROR_DECODE, 3); + } + + // If there already is a key, merge the two + if (key != null && facebookKey != null) { + log.add(LogType.MSG_IMPORT_MERGE, 3); + facebookKey = key.merge(facebookKey, log, 4); + // If the merge didn't fail, use the new merged key + if (facebookKey != null) { + key = facebookKey; + } else { + log.add(LogType.MSG_IMPORT_MERGE_ERROR, 4); + } + } else if (facebookKey != null) { + key = facebookKey; + } + } catch (Keyserver.QueryFailedException e) { + // download failed, too bad. just proceed + Log.e(Constants.TAG, "query failed", e); + log.add(LogType.MSG_IMPORT_FETCH_ERROR_KEYSERVER, 3, e.getMessage()); + } + } } if (key == null) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java index 3f90a08c2..ed2123987 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java @@ -233,6 +233,18 @@ public abstract class OperationResult implements Parcelable { dest.writeParcelable(mSubResult, 0); } + public static final Parcelable.Creator<SubLogEntryParcel> CREATOR = new Parcelable.Creator<SubLogEntryParcel>() { + @Override + public SubLogEntryParcel createFromParcel(Parcel in) { + return new SubLogEntryParcel(in); + } + + @Override + public SubLogEntryParcel[] newArray(int size) { + return new SubLogEntryParcel[size]; + } + }; + @Override StringBuilder getPrintableLogEntry(Resources resources, int indent) { @@ -757,6 +769,7 @@ public abstract class OperationResult implements Parcelable { MSG_IMPORT_FETCH_ERROR_KEYSERVER(LogLevel.ERROR, R.string.msg_import_fetch_error_keyserver), MSG_IMPORT_FETCH_ERROR_KEYSERVER_SECRET (LogLevel.ERROR, R.string.msg_import_fetch_error_keyserver_secret), MSG_IMPORT_FETCH_KEYBASE (LogLevel.INFO, R.string.msg_import_fetch_keybase), + MSG_IMPORT_FETCH_FACEBOOK (LogLevel.INFO, R.string.msg_import_fetch_facebook), MSG_IMPORT_FETCH_KEYSERVER (LogLevel.INFO, R.string.msg_import_fetch_keyserver), MSG_IMPORT_FETCH_KEYSERVER_OK (LogLevel.DEBUG, R.string.msg_import_fetch_keyserver_ok), MSG_IMPORT_KEYSERVER (LogLevel.DEBUG, R.string.msg_import_keyserver), |