wip: trust id logic
This commit is contained in:
@@ -35,6 +35,7 @@ import org.sufficientlysecure.keychain.Constants;
|
||||
import org.sufficientlysecure.keychain.pgp.WrappedUserAttribute;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.ApiAllowedKeys;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.ApiApps;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.ApiTrustIdentity;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.Certs;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRingData;
|
||||
import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings;
|
||||
@@ -929,6 +930,27 @@ public class KeychainProvider extends ContentProvider {
|
||||
db.update(Tables.UPDATED_KEYS, values, null, null);
|
||||
break;
|
||||
}
|
||||
case TRUST_IDS_BY_PACKAGE_NAME_AND_TRUST_ID: {
|
||||
Long masterKeyId = values.getAsLong(ApiTrustIdentity.MASTER_KEY_ID);
|
||||
long updateTime = values.getAsLong(KeychainContract.ApiTrustIdentity.LAST_UPDATED);
|
||||
if (masterKeyId == null) {
|
||||
throw new IllegalArgumentException("master_key_id must be a non-null value!");
|
||||
}
|
||||
|
||||
ContentValues actualValues = new ContentValues();
|
||||
String packageName = uri.getPathSegments().get(2);
|
||||
actualValues.put(ApiTrustIdentity.PACKAGE_NAME, packageName);
|
||||
actualValues.put(ApiTrustIdentity.IDENTIFIER, uri.getLastPathSegment());
|
||||
actualValues.put(ApiTrustIdentity.MASTER_KEY_ID, masterKeyId);
|
||||
actualValues.put(ApiTrustIdentity.LAST_UPDATED, updateTime);
|
||||
|
||||
try {
|
||||
db.replace(Tables.API_TRUST_IDENTITIES, null, actualValues);
|
||||
} finally {
|
||||
db.close();
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
throw new UnsupportedOperationException("Unknown uri: " + uri);
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
package org.sufficientlysecure.keychain.provider;
|
||||
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
@@ -83,4 +85,33 @@ public class TrustIdentityDataAccessObject {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public Date getLastUpdateForTrustId(String trustId) {
|
||||
Cursor cursor = mQueryInterface.query(ApiTrustIdentity.buildByPackageNameAndTrustId(packageName, trustId),
|
||||
null, null, null, null);
|
||||
|
||||
try {
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
long lastUpdated = cursor.getColumnIndex(ApiTrustIdentity.LAST_UPDATED);
|
||||
return new Date(lastUpdated);
|
||||
}
|
||||
} finally {
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setMasterKeyIdForTrustId(String trustId, long masterKeyId, Date date) {
|
||||
Date lastUpdated = getLastUpdateForTrustId(trustId);
|
||||
if (lastUpdated != null && lastUpdated.after(date)) {
|
||||
throw new IllegalArgumentException("Database entry was newer than the one to be inserted! Cannot backdate");
|
||||
}
|
||||
|
||||
ContentValues cv = new ContentValues();
|
||||
cv.put(ApiTrustIdentity.MASTER_KEY_ID, masterKeyId);
|
||||
cv.put(ApiTrustIdentity.LAST_UPDATED, date.getTime());
|
||||
mQueryInterface.update(ApiTrustIdentity.buildByPackageNameAndTrustId(packageName, trustId), cv, null, null);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user