Skip to content
This repository has been archived by the owner on Feb 12, 2024. It is now read-only.

Commit

Permalink
Share contact on barcode click / OMEMO fixed / bug fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
DoM1niC committed Nov 26, 2016
1 parent 2176f36 commit c30d7c1
Show file tree
Hide file tree
Showing 35 changed files with 455 additions and 157 deletions.
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ android {
defaultConfig {
minSdkVersion 14
targetSdkVersion 24
versionCode 1480
versionName "2.09"
versionCode 1481
versionName "2.10"
archivesBaseName += "-$versionName"
applicationId "net.atomarea.flowx"
multiDexEnabled true
Expand Down
12 changes: 1 addition & 11 deletions src/main/java/net/atomarea/flowx/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,14 @@
public final class Config {

private static final int UNENCRYPTED = 1;
private static final int OPENPGP = 2;
private static final int OTR = 4;
private static final int OMEMO = 8;

private static final int ENCRYPTION_MASK = UNENCRYPTED | OPENPGP | OTR | OMEMO;
private static final int ENCRYPTION_MASK = UNENCRYPTED | OMEMO;

public static boolean supportUnencrypted() {
return (ENCRYPTION_MASK & UNENCRYPTED) != 0;
}

public static boolean supportOpenPgp() {
return (ENCRYPTION_MASK & OPENPGP) != 0;
}

public static boolean supportOtr() {
return (ENCRYPTION_MASK & OTR) != 0;
}

public static boolean supportOmemo() {
return (ENCRYPTION_MASK & OMEMO) != 0;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,15 @@ public void preVerifyFingerprint(Account account, String fingerprint) {
axolotlStore.preVerifyFingerprint(account, account.getJid().toBareJid().toPreppedString(), fingerprint);
}

public boolean hasVerifiedKeys(String name) {
for(XmppAxolotlSession session : this.sessions.getAll(new AxolotlAddress(name,0)).values()) {
if (session.getTrust().isVerified()) {
return true;
}
}
return false;
}

private static class AxolotlAddressMap<T> {
protected Map<String, Map<Integer, T>> map;
protected final Object MAP_LOCK = new Object();
Expand Down Expand Up @@ -226,6 +235,7 @@ public enum FetchStatus {
SUCCESS,
SUCCESS_VERIFIED,
TIMEOUT,
SUCCESS_TRUSTED,
ERROR
}

Expand Down Expand Up @@ -405,6 +415,7 @@ public void registerDevices(final Jid jid, @NonNull final Set<Integer> deviceIds
}
}
this.deviceIds.put(jid, deviceIds);
mXmppConnectionService.updateConversationUi(); //update the lock icon
mXmppConnectionService.keyStatusUpdated(null);
}

Expand Down Expand Up @@ -779,6 +790,8 @@ private void finishBuildingSessionsFromPEP(final AxolotlAddress address) {
report = FetchStatus.SUCCESS;
} else if (own.containsValue(FetchStatus.SUCCESS_VERIFIED) || remote.containsValue(FetchStatus.SUCCESS_VERIFIED)) {
report = FetchStatus.SUCCESS_VERIFIED;
} else if (own.containsValue(FetchStatus.SUCCESS_TRUSTED) || remote.containsValue(FetchStatus.SUCCESS_TRUSTED)) {
report = FetchStatus.SUCCESS_TRUSTED;
} else if (own.containsValue(FetchStatus.ERROR) || remote.containsValue(FetchStatus.ERROR)) {
report = FetchStatus.ERROR;
}
Expand Down Expand Up @@ -836,8 +849,15 @@ public void onIqPacketReceived(Account account, IqPacket packet) {
verifySessionWithPEP(session);
} else {
FingerprintStatus status = getFingerprintTrust(bundle.getIdentityKey().getFingerprint().replaceAll("\\s",""));
boolean verified = status != null && status.isVerified();
fetchStatusMap.put(address, verified ? FetchStatus.SUCCESS_VERIFIED : FetchStatus.SUCCESS);
FetchStatus fetchStatus;
if (status != null && status.isVerified()) {
fetchStatus = FetchStatus.SUCCESS_VERIFIED;
} else if (status != null && status.isTrusted()) {
fetchStatus = FetchStatus.SUCCESS_TRUSTED;
} else {
fetchStatus = FetchStatus.SUCCESS;
}
fetchStatusMap.put(address, fetchStatus);
finishBuildingSessionsFromPEP(address);
}
} catch (UntrustedIdentityException | InvalidKeyException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,14 @@ public static FingerprintStatus createActiveUndecided() {
return status;
}

public static FingerprintStatus createActiveTrusted() {
final FingerprintStatus status = new FingerprintStatus();
status.trust = Trust.TRUSTED;
status.active = true;
status.lastActivation = System.currentTimeMillis();
return status;
}

public static FingerprintStatus createActiveVerified(boolean x509) {
final FingerprintStatus status = new FingerprintStatus();
status.trust = x509 ? Trust.VERIFIED_X509 : Trust.VERIFIED;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@

import net.atomarea.flowx.Config;
import net.atomarea.flowx.entities.Account;
import net.atomarea.flowx.entities.Contact;
import net.atomarea.flowx.services.XmppConnectionService;
import net.atomarea.flowx.xmpp.jid.InvalidJidException;
import net.atomarea.flowx.xmpp.jid.Jid;

public class SQLiteAxolotlStore implements AxolotlStore {

Expand Down Expand Up @@ -191,7 +194,12 @@ public void saveIdentity(String name, IdentityKey identityKey) {
String fingerprint = identityKey.getFingerprint().replaceAll("\\s", "");
FingerprintStatus status = getFingerprintStatus(fingerprint);
if (status == null) {
status = FingerprintStatus.createActiveUndecided(); //default for new keys
if (mXmppConnectionService.blindTrustBeforeVerification() && !account.getAxolotlService().hasVerifiedKeys(name)) {
Log.d(Config.LOGTAG,account.getJid().toBareJid()+": blindly trusted "+fingerprint+" of "+name);
status = FingerprintStatus.createActiveTrusted();
} else {
status = FingerprintStatus.createActiveUndecided();
}
} else {
status = status.toActive();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
public static final String MODE = "mode";
public static final String ATTRIBUTES = "attributes";

public static final String ATTRIBUTE_NEXT_ENCRYPTION = "";
public static final String ATTRIBUTE_NEXT_ENCRYPTION = "next_encryption";
public static final String ATTRIBUTE_MUC_PASSWORD = "muc_password";
public static final String ATTRIBUTE_MUTED_TILL = "muted_till";
public static final String ATTRIBUTE_ALWAYS_NOTIFY = "always_notify";
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/net/atomarea/flowx/entities/Message.java
Original file line number Diff line number Diff line change
Expand Up @@ -495,7 +495,7 @@ public boolean mergeable(final Message message) {
!message.bodyIsHeart() &&
!this.bodyIsXmpp() &&
!message.bodyIsXmpp() &&
this.isTrusted() == message.isTrusted()
((this.axolotlFingerprint == null && message.axolotlFingerprint == null) || this.axolotlFingerprint.equals(message.getFingerprint()))
);
}

Expand Down Expand Up @@ -818,7 +818,7 @@ public String getFingerprint() {

public boolean isTrusted() {
FingerprintStatus s = conversation.getAccount().getAxolotlService().getFingerprintTrust(axolotlFingerprint);
return s != null && s.isTrustedAndActive();
return s != null && s.isTrusted();
}

private int getPreviousEncryption() {
Expand Down
17 changes: 7 additions & 10 deletions src/main/java/net/atomarea/flowx/generator/AbstractGenerator.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

import android.util.Base64;

import net.atomarea.flowx.Config;
import net.atomarea.flowx.R;
import net.atomarea.flowx.crypto.axolotl.AxolotlService;
import net.atomarea.flowx.services.XmppConnectionService;
import net.atomarea.flowx.utils.PhoneHelper;
import net.atomarea.flowx.xmpp.jingle.stanzas.Content;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
Expand All @@ -12,13 +19,6 @@
import java.util.Locale;
import java.util.TimeZone;

import net.atomarea.flowx.Config;
import net.atomarea.flowx.R;
import net.atomarea.flowx.crypto.axolotl.AxolotlService;
import net.atomarea.flowx.services.XmppConnectionService;
import net.atomarea.flowx.utils.PhoneHelper;
import net.atomarea.flowx.xmpp.jingle.stanzas.Content;

public abstract class AbstractGenerator {
private final String[] FEATURES = {
"urn:xmpp:jingle:1",
Expand Down Expand Up @@ -115,9 +115,6 @@ public List<String> getFeatures() {
if (!mXmppConnectionService.useTorToConnect()) {
features.addAll(Arrays.asList(PRIVACY_SENSITIVE));
}
if (Config.supportOtr()) {
features.addAll(Arrays.asList(OTR));
}
Collections.sort(features);
return features;
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/atomarea/flowx/parser/MessageParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ && extractChatState(mXmppConnectionService.find(account, counterpart.toBareJid()
}
}
Message message = null;
if (body != null && body.startsWith("?OTR") && Config.supportOtr()) {
if (body != null && body.startsWith("?OTR")) {
if (!isForwarded && !isTypeGroupChat && isProperlyAddressed && !conversationMultiMode) {

} else {
Expand Down
22 changes: 16 additions & 6 deletions src/main/java/net/atomarea/flowx/persistance/DatabaseBackend.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
private static DatabaseBackend instance = null;

public static final String DATABASE_NAME = "history";
public static final int DATABASE_VERSION = 32;
public static final int DATABASE_VERSION = 33;
private static String START_TIMES_TABLE = "start_times";

private static String CREATE_CONTATCS_STATEMENT = "create table "
Expand Down Expand Up @@ -361,12 +361,12 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE "+ SQLiteAxolotlStore.IDENTITIES_TABLENAME + " ADD COLUMN "+SQLiteAxolotlStore.TRUST + " TEXT");
db.execSQL("ALTER TABLE "+ SQLiteAxolotlStore.IDENTITIES_TABLENAME + " ADD COLUMN "+SQLiteAxolotlStore.ACTIVE + " NUMBER");
HashMap<Integer,ContentValues> migration = new HashMap<>();
migration.put(0,createFingerprintStatusContentValues(FingerprintStatus.Trust.UNDECIDED,true));
migration.put(0,createFingerprintStatusContentValues(FingerprintStatus.Trust.TRUSTED,true));
migration.put(1,createFingerprintStatusContentValues(FingerprintStatus.Trust.TRUSTED, true));
migration.put(2,createFingerprintStatusContentValues(FingerprintStatus.Trust.UNTRUSTED, true));
migration.put(3,createFingerprintStatusContentValues(FingerprintStatus.Trust.COMPROMISED, false));
migration.put(4,createFingerprintStatusContentValues(FingerprintStatus.Trust.TRUSTED, false));
migration.put(5,createFingerprintStatusContentValues(FingerprintStatus.Trust.UNDECIDED, false));
migration.put(5,createFingerprintStatusContentValues(FingerprintStatus.Trust.TRUSTED, false));
migration.put(6,createFingerprintStatusContentValues(FingerprintStatus.Trust.UNTRUSTED, false));
migration.put(7,createFingerprintStatusContentValues(FingerprintStatus.Trust.VERIFIED_X509, true));
migration.put(8,createFingerprintStatusContentValues(FingerprintStatus.Trust.VERIFIED_X509, false));
Expand All @@ -375,13 +375,18 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String[] where = {String.valueOf(entry.getKey())};
db.update(SQLiteAxolotlStore.IDENTITIES_TABLENAME,entry.getValue(),whereClause,where);
}

}
if (oldVersion < 32 && newVersion >= 32) {
db.execSQL("ALTER TABLE "+ SQLiteAxolotlStore.IDENTITIES_TABLENAME + " ADD COLUMN "+SQLiteAxolotlStore.LAST_ACTIVATION + " NUMBER");
ContentValues defaults = new ContentValues();
defaults.put(SQLiteAxolotlStore.LAST_ACTIVATION,System.currentTimeMillis());
db.update(SQLiteAxolotlStore.IDENTITIES_TABLENAME,defaults,null,null);
}
if (oldVersion < 33 && newVersion >= 33) {
String whereClause = SQLiteAxolotlStore.OWN+"=1";
db.update(SQLiteAxolotlStore.IDENTITIES_TABLENAME,createFingerprintStatusContentValues(FingerprintStatus.Trust.VERIFIED,true),whereClause,null);
}
}

private static ContentValues createFingerprintStatusContentValues(FingerprintStatus.Trust trust, boolean active) {
Expand Down Expand Up @@ -1327,9 +1332,14 @@ public boolean startTimeCountExceedsThreshold() {
return count >= Config.FREQUENT_RESTARTS_THRESHOLD;
}

public void clearStartTimeCounter() {
Log.d(Config.LOGTAG,"resetting start time counter");
public void clearStartTimeCounter(boolean justOne) {
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL("delete from "+START_TIMES_TABLE);
if (justOne) {
db.execSQL("delete from "+START_TIMES_TABLE+" where timestamp in (select timestamp from "+START_TIMES_TABLE+" order by timestamp desc limit 1)");
Log.d(Config.LOGTAG,"do not count start up after being swiped away");
} else {
Log.d(Config.LOGTAG,"resetting start time counter");
db.execSQL("delete from " + START_TIMES_TABLE);
}
}
}
4 changes: 3 additions & 1 deletion src/main/java/net/atomarea/flowx/services/AvatarService.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,9 @@ public AvatarService(XmppConnectionService service) {
}

private Bitmap get(final Contact contact, final int size, boolean cachedOnly) {
final String KEY = key(contact, size);
if (contact.isSelf()) {
return get(contact.getAccount(),size,cachedOnly);
} final String KEY = key(contact, size);
Bitmap avatar = this.mXmppConnectionService.getBitmapCache().get(KEY);
if (avatar != null || cachedOnly) {
return avatar;
Expand Down
Loading

0 comments on commit c30d7c1

Please sign in to comment.