use Enum for verification status of certificates

This commit is contained in:
Vincent Breitmoser
2018-06-25 14:47:44 +02:00
parent 64bde4c680
commit c8481d0247
19 changed files with 103 additions and 56 deletions

View File

@@ -8,7 +8,7 @@ import org.sufficientlysecure.keychain.CertsModel;
@AutoValue
public abstract class Certification implements CertsModel {
public static final CertsModel.Factory<Certification> FACTORY =
new CertsModel.Factory<>(AutoValue_Certification::new);
new CertsModel.Factory<>(AutoValue_Certification::new, CustomColumnAdapters.VERIFICATON_STATUS_ADAPTER);
public static final SelectVerifyingCertDetailsMapper<CertDetails> CERT_DETAILS_MAPPER =
new SelectVerifyingCertDetailsMapper<>(AutoValue_Certification_CertDetails::new);

View File

@@ -7,10 +7,10 @@ import android.support.annotation.NonNull;
import com.squareup.sqldelight.ColumnAdapter;
import org.sufficientlysecure.keychain.model.AutocryptPeer.GossipOrigin;
import org.sufficientlysecure.keychain.pgp.CanonicalizedKeyRing.VerificationStatus;
import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType;
public final class CustomColumnAdapters {
private CustomColumnAdapters() { }
@@ -64,4 +64,30 @@ public final class CustomColumnAdapters {
return (long) value.getNum();
}
};
public static final ColumnAdapter<VerificationStatus,Long> VERIFICATON_STATUS_ADAPTER = new ColumnAdapter<VerificationStatus, Long>() {
@NonNull
@Override
public VerificationStatus decode(Long databaseValue) {
if (databaseValue == null) {
return VerificationStatus.UNVERIFIED;
}
switch (databaseValue.intValue()) {
case 0: return VerificationStatus.UNVERIFIED;
case 1: return VerificationStatus.VERIFIED_SECRET;
case 2: return VerificationStatus.VERIFIED_SELF;
default: throw new IllegalArgumentException();
}
}
@Override
public Long encode(@NonNull VerificationStatus value) {
switch (value) {
case UNVERIFIED: return 0L;
case VERIFIED_SECRET: return 1L;
case VERIFIED_SELF: return 2L;
default: throw new IllegalArgumentException();
}
}
};
}

View File

@@ -8,6 +8,7 @@ import java.util.List;
import com.google.auto.value.AutoValue;
import com.squareup.sqldelight.RowMapper;
import org.sufficientlysecure.keychain.KeysModel;
import org.sufficientlysecure.keychain.pgp.CanonicalizedKeyRing.VerificationStatus;
import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType;
@@ -15,8 +16,9 @@ import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType;
public abstract class SubKey implements KeysModel {
public static final Factory<SubKey> FACTORY =
new Factory<>(AutoValue_SubKey::new, CustomColumnAdapters.SECRET_KEY_TYPE_ADAPTER);
public static final UnifiedKeyViewMapper<UnifiedKeyInfo> UNIFIED_KEY_INFO_MAPPER =
FACTORY.selectUnifiedKeyInfoByMasterKeyIdMapper(AutoValue_SubKey_UnifiedKeyInfo::new);
public static final UnifiedKeyViewMapper<UnifiedKeyInfo, Certification> UNIFIED_KEY_INFO_MAPPER =
FACTORY.selectAllUnifiedKeyInfoMapper(
AutoValue_SubKey_UnifiedKeyInfo::new, Certification.FACTORY);
public static Mapper<SubKey> SUBKEY_MAPPER = new Mapper<>(FACTORY);
public static RowMapper<SecretKeyType> SKT_MAPPER = FACTORY.selectSecretKeyTypeMapper();
@@ -38,8 +40,8 @@ public abstract class SubKey implements KeysModel {
}
public boolean is_verified() {
Integer verified = verified();
return verified != null && verified == 1;
VerificationStatus verified = verified();
return verified != null && verified == VerificationStatus.VERIFIED_SECRET;
}
public boolean has_duplicate() {

View File

@@ -3,30 +3,29 @@ package org.sufficientlysecure.keychain.model;
import com.google.auto.value.AutoValue;
import org.sufficientlysecure.keychain.UserPacketsModel;
import org.sufficientlysecure.keychain.pgp.CanonicalizedKeyRing.VerificationStatus;
import org.sufficientlysecure.keychain.provider.KeychainContract.Certs;
@AutoValue
public abstract class UserPacket implements UserPacketsModel {
public static final Factory<UserPacket> FACTORY = new Factory<>(AutoValue_UserPacket::new);
public static final SelectUserIdsByMasterKeyIdMapper<UserId> USER_ID_MAPPER =
FACTORY.selectUserIdsByMasterKeyIdMapper(AutoValue_UserPacket_UserId::new);
public static final SelectUserAttributesByTypeAndMasterKeyIdMapper<UserAttribute> USER_ATTRIBUTE_MAPPER =
FACTORY.selectUserAttributesByTypeAndMasterKeyIdMapper(AutoValue_UserPacket_UserAttribute::new);
public static final SelectUserIdsByMasterKeyIdMapper<UserId, Certification> USER_ID_MAPPER =
FACTORY.selectUserIdsByMasterKeyIdMapper(AutoValue_UserPacket_UserId::new, Certification.FACTORY);
public static final SelectUserAttributesByTypeAndMasterKeyIdMapper<UserAttribute, Certification> USER_ATTRIBUTE_MAPPER =
FACTORY.selectUserAttributesByTypeAndMasterKeyIdMapper(AutoValue_UserPacket_UserAttribute::new, Certification.FACTORY);
@AutoValue
public static abstract class UserId implements SelectUserIdsByMasterKeyIdModel {
public boolean isVerified() {
Integer verified = verified();
return verified != null && verified == Certs.VERIFIED_SECRET;
return verified() == VerificationStatus.VERIFIED_SECRET;
}
}
@AutoValue
public static abstract class UserAttribute implements SelectUserAttributesByTypeAndMasterKeyIdModel {
public boolean isVerified() {
Integer verified = verified();
return verified != null && verified == Certs.VERIFIED_SECRET;
return verified() == VerificationStatus.VERIFIED_SECRET;
}
}
}