From 4967a49949d4f0ec1a54c62aee21287cfa3ed1f9 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Tue, 12 Jun 2018 16:44:27 +0200 Subject: [PATCH] fix date queries in autocrypt handling --- .../AutocryptPeerDataAccessObject.java | 23 +++++++++++-------- .../keychain/remote/AutocryptInteractor.java | 4 ++-- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/AutocryptPeerDataAccessObject.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/AutocryptPeerDataAccessObject.java index 62afe2bec..32c8c3ee1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/AutocryptPeerDataAccessObject.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/AutocryptPeerDataAccessObject.java @@ -36,6 +36,11 @@ import org.sufficientlysecure.keychain.provider.KeychainContract.ApiAutocryptPee public class AutocryptPeerDataAccessObject { private static final long AUTOCRYPT_DISCOURAGE_THRESHOLD_MILLIS = 35 * DateUtils.DAY_IN_MILLIS; + private static final String[] PROJECTION_LAST_SEEN = { ApiAutocryptPeer.LAST_SEEN }; + private static final String[] PROJECTION_LAST_SEEN_KEY = { ApiAutocryptPeer.LAST_SEEN_KEY }; + private static final String[] PROJECTION_GOSSIP_LAST_SEEN_KEY = { ApiAutocryptPeer.GOSSIP_LAST_SEEN_KEY }; + private static final String[] PROJECTION_MASTER_KEY_ID = { ApiAutocryptPeer.MASTER_KEY_ID }; + private static final String[] PROJECTION_AUTOCRYPT_QUERY = { ApiAutocryptPeer.IDENTIFIER, ApiAutocryptPeer.LAST_SEEN, @@ -104,12 +109,12 @@ public class AutocryptPeerDataAccessObject { public Long getMasterKeyIdForAutocryptPeer(String autocryptId) { Cursor cursor = queryInterface.query( - ApiAutocryptPeer.buildByPackageNameAndAutocryptId(packageName, autocryptId), null, null, null, null); + ApiAutocryptPeer.buildByPackageNameAndAutocryptId(packageName, autocryptId), + PROJECTION_MASTER_KEY_ID, null, null, null); try { if (cursor != null && cursor.moveToFirst()) { - int masterKeyIdColumn = cursor.getColumnIndex(ApiAutocryptPeer.MASTER_KEY_ID); - return cursor.getLong(masterKeyIdColumn); + return cursor.getLong(0); } } finally { if (cursor != null) { @@ -122,11 +127,11 @@ public class AutocryptPeerDataAccessObject { public Date getLastSeen(String autocryptId) { Cursor cursor = queryInterface.query(ApiAutocryptPeer.buildByPackageNameAndAutocryptId(packageName, autocryptId), - null, null, null, null); + PROJECTION_LAST_SEEN, null, null, null); try { if (cursor != null && cursor.moveToFirst()) { - long lastUpdated = cursor.getColumnIndex(ApiAutocryptPeer.LAST_SEEN); + long lastUpdated = cursor.getLong(0); return new Date(lastUpdated); } } finally { @@ -139,11 +144,11 @@ public class AutocryptPeerDataAccessObject { public Date getLastSeenKey(String autocryptId) { Cursor cursor = queryInterface.query(ApiAutocryptPeer.buildByPackageNameAndAutocryptId(packageName, autocryptId), - null, null, null, null); + PROJECTION_LAST_SEEN_KEY, null, null, null); try { if (cursor != null && cursor.moveToFirst()) { - long lastUpdated = cursor.getColumnIndex(ApiAutocryptPeer.LAST_SEEN_KEY); + long lastUpdated = cursor.getLong(0); return new Date(lastUpdated); } } finally { @@ -156,11 +161,11 @@ public class AutocryptPeerDataAccessObject { public Date getLastSeenGossip(String autocryptId) { Cursor cursor = queryInterface.query(ApiAutocryptPeer.buildByPackageNameAndAutocryptId(packageName, autocryptId), - null, null, null, null); + PROJECTION_GOSSIP_LAST_SEEN_KEY, null, null, null); try { if (cursor != null && cursor.moveToFirst()) { - long lastUpdated = cursor.getColumnIndex(ApiAutocryptPeer.GOSSIP_LAST_SEEN_KEY); + long lastUpdated = cursor.getLong(0); return new Date(lastUpdated); } } finally { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/AutocryptInteractor.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/AutocryptInteractor.java index 3026aaaba..c981f5df5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/AutocryptInteractor.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/AutocryptInteractor.java @@ -40,13 +40,13 @@ class AutocryptInteractor { // 1. If the message’s effective date is older than the peers[from-addr].autocrypt_timestamp value, then no changes are required, and the update process terminates. Date lastSeenAutocrypt = autocryptPeerDao.getLastSeenKey(autocryptPeerId); - if (lastSeenAutocrypt != null && lastSeenAutocrypt.after(effectiveDate)) { + if (lastSeenAutocrypt != null && effectiveDate.compareTo(lastSeenAutocrypt) <= 0) { return; } // 2. If the message’s effective date is more recent than peers[from-addr].last_seen then set peers[from-addr].last_seen to the message’s effective date. Date lastSeen = autocryptPeerDao.getLastSeen(autocryptPeerId); - if (lastSeen == null || lastSeen.after(effectiveDate)) { + if (lastSeen == null || effectiveDate.after(lastSeen)) { autocryptPeerDao.updateLastSeen(autocryptPeerId, effectiveDate); }