Skip to content

Commit

Permalink
Better support for local storage with passphrase disabled.
Browse files Browse the repository at this point in the history
1) Never get into a state where messages aren't displayed
   unencrypted.

2) Fix bug where locked DB required launching twice.
  • Loading branch information
moxie0 committed Feb 28, 2014
1 parent 81ee9e3 commit 8ea4db0
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 10 deletions.
23 changes: 15 additions & 8 deletions src/org/thoughtcrime/securesms/RoutingActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@
import org.thoughtcrime.securesms.recipients.RecipientFormattingException;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.service.ApplicationMigrationService;
import org.thoughtcrime.securesms.service.DirectoryRefreshListener;
import org.thoughtcrime.securesms.service.DirectoryRefreshService;
import org.thoughtcrime.securesms.util.DirectoryHelper;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.whispersystems.textsecure.crypto.MasterSecret;

Expand All @@ -24,18 +21,27 @@ public class RoutingActivity extends PassphraseRequiredSherlockActivity {
private static final int STATE_UPGRADE_DATABASE = 5;
private static final int STATE_PROMPT_PUSH_REGISTRATION = 6;

private MasterSecret masterSecret = null;
private boolean isVisible = false;
private MasterSecret masterSecret = null;
private boolean isVisible = false;
private boolean canceledResult = false;
private boolean newIntent = false;

@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
this.newIntent = true;
}

@Override
public void onResume() {
this.isVisible = true;
if (this.canceledResult && !this.newIntent) {
finish();
}

this.newIntent = false;
this.canceledResult = false;
this.isVisible = true;
super.onResume();
}

Expand Down Expand Up @@ -65,8 +71,9 @@ public void onMasterSecretCleared() {

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_CANCELED)
finish();
if (resultCode == RESULT_CANCELED) {
canceledResult = true;
}
}

private void routeApplicationState() {
Expand Down
4 changes: 2 additions & 2 deletions src/org/thoughtcrime/securesms/service/PushReceiver.java
Original file line number Diff line number Diff line change
Expand Up @@ -281,8 +281,8 @@ private void handleReceivedMessageForNoSession(MasterSecret masterSecret,
}

private Pair<Long, Long> insertMessagePlaceholder(MasterSecret masterSecret,
IncomingPushMessage message,
boolean secure)
IncomingPushMessage message,
boolean secure)
{
IncomingTextMessage placeholder = new IncomingTextMessage(message, "", null);

Expand Down
20 changes: 20 additions & 0 deletions src/org/thoughtcrime/securesms/service/SendReceiveService.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@
import android.util.Log;
import android.widget.Toast;

import org.thoughtcrime.securesms.crypto.InvalidPassphraseException;
import org.thoughtcrime.securesms.crypto.MasterSecretUtil;
import org.thoughtcrime.securesms.database.CanonicalSessionMigrator;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.WorkerThread;
import org.whispersystems.textsecure.crypto.MasterSecret;

Expand Down Expand Up @@ -185,6 +188,7 @@ private void initializeMasterSecret() {
registerReceiver(clearKeyReceiver, clearKeyFilter, KeyCachingService.KEY_PERMISSION, null);

Intent bindIntent = new Intent(this, KeyCachingService.class);
startService(bindIntent);
bindService(bindIntent, serviceConnection, Context.BIND_AUTO_CREATE);
}

Expand Down Expand Up @@ -242,6 +246,12 @@ public SendReceiveWorkItem(Intent intent, int what) {

@Override
public void run() {
MasterSecret masterSecret = SendReceiveService.this.masterSecret;

if (masterSecret == null && TextSecurePreferences.isPasswordDisabled(SendReceiveService.this)) {
masterSecret = getPlaceholderSecret();
}

switch (what) {
case RECEIVE_SMS: smsReceiver.process(masterSecret, intent); return;
case SEND_SMS: smsSender.process(masterSecret, intent); return;
Expand All @@ -254,6 +264,16 @@ public void run() {
case DOWNLOAD_AVATAR: avatarDownloader.process(masterSecret, intent); return;
}
}

private MasterSecret getPlaceholderSecret() {
try {
return MasterSecretUtil.getMasterSecret(SendReceiveService.this,
MasterSecretUtil.UNENCRYPTED_PASSPHRASE);
} catch (InvalidPassphraseException e) {
Log.w("SendReceiveService", e);
return null;
}
}
}

public class ToastHandler extends Handler {
Expand Down

0 comments on commit 8ea4db0

Please sign in to comment.