Update registration to allow PIN entry.

This commit is contained in:
Greyson Parrelli
2020-04-07 13:19:53 -04:00
parent 6b37675a81
commit acbfff89d3
46 changed files with 1206 additions and 161 deletions

View File

@@ -0,0 +1,26 @@
package org.thoughtcrime.securesms.registration;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.storage.StorageSyncHelper;
public final class RegistrationUtil {
private static final String TAG = Log.tag(RegistrationUtil.class);
private RegistrationUtil() {}
/**
* There's several events where a registration may or may not be considered complete based on what
* path a user has taken. This will only truly mark registration as complete if all of the
* requirements are met.
*/
public static void markRegistrationPossiblyComplete() {
if (SignalStore.kbsValues().hasPin() && !Recipient.self().getProfileName().isEmpty()) {
Log.i(TAG, "Marking registration completed.", new Throwable());
SignalStore.registrationValues().setRegistrationComplete();
StorageSyncHelper.scheduleSyncForDataChange();
}
}
}

View File

@@ -31,6 +31,7 @@ import org.thoughtcrime.securesms.registration.service.CodeVerificationRequest;
import org.thoughtcrime.securesms.registration.service.RegistrationCodeRequest;
import org.thoughtcrime.securesms.registration.service.RegistrationService;
import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel;
import org.thoughtcrime.securesms.util.CommunicationActions;
import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener;
import org.whispersystems.signalservice.internal.contacts.entities.TokenResponse;
@@ -305,16 +306,14 @@ public final class EnterCodeFragment extends BaseRegistrationFragment {
}
private void sendEmailToSupport() {
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{ getString(R.string.RegistrationActivity_support_email) });
intent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.RegistrationActivity_code_support_subject));
intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.RegistrationActivity_code_support_body,
getDevice(),
getAndroidVersion(),
BuildConfig.VERSION_NAME,
Locale.getDefault()));
startActivity(intent);
CommunicationActions.openEmail(requireContext(),
getString(R.string.RegistrationActivity_support_email),
getString(R.string.RegistrationActivity_code_support_subject),
getString(R.string.RegistrationActivity_code_support_body,
getDevice(),
getAndroidVersion(),
BuildConfig.VERSION_NAME,
Locale.getDefault()));
}
private static String getDevice() {

View File

@@ -13,7 +13,9 @@ import androidx.navigation.ActivityNavigator;
import org.thoughtcrime.securesms.MainActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.lock.v2.CreateKbsPinActivity;
import org.thoughtcrime.securesms.pin.PinRestoreActivity;
import org.thoughtcrime.securesms.profiles.edit.EditProfileActivity;
public final class RegistrationCompleteFragment extends BaseRegistrationFragment {
@@ -30,12 +32,11 @@ public final class RegistrationCompleteFragment extends BaseRegistrationFragment
FragmentActivity activity = requireActivity();
if (!isReregister()) {
if (SignalStore.storageServiceValues().needsAccountRestore()) {
activity.startActivity(new Intent(activity, PinRestoreActivity.class));
} else if (!isReregister()) {
final Intent main = new Intent(activity, MainActivity.class);
final Intent profile = new Intent(activity, EditProfileActivity.class);
profile.putExtra(EditProfileActivity.SHOW_TOOLBAR, false);
final Intent profile = EditProfileActivity.getIntent(activity, false);
Intent kbs = CreateKbsPinActivity.getIntentForPinCreate(requireContext());
activity.startActivity(chainIntents(chainIntents(profile, kbs), main));

View File

@@ -39,8 +39,10 @@ import org.whispersystems.signalservice.api.KbsPinData;
import org.whispersystems.signalservice.api.SignalServiceAccountManager;
import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess;
import org.whispersystems.signalservice.api.push.exceptions.RateLimitException;
import org.whispersystems.signalservice.api.util.UuidUtil;
import org.whispersystems.signalservice.internal.contacts.entities.TokenResponse;
import org.whispersystems.signalservice.internal.push.LockedException;
import org.whispersystems.signalservice.internal.push.VerifyAccountResponse;
import java.io.IOException;
import java.util.List;
@@ -210,16 +212,18 @@ public final class CodeVerificationRequest {
Log.i(TAG, "Calling verifyAccountWithCode(): reglockV1? " + !TextUtils.isEmpty(registrationLockV1) + ", reglockV2? " + !TextUtils.isEmpty(registrationLockV2));
UUID uuid = accountManager.verifyAccountWithCode(code,
null,
registrationId,
!hasFcm,
registrationLockV1,
registrationLockV2,
unidentifiedAccessKey,
universalUnidentifiedAccess,
AppCapabilities.getCapabilities(isV2RegistrationLock));
// TODO [greyson] [pins] ^^ This needs to be updated. It's not just for reglock, but also if they needed to enter a PIN at all
VerifyAccountResponse response = accountManager.verifyAccountWithCode(code,
null,
registrationId,
!hasFcm,
registrationLockV1,
registrationLockV2,
unidentifiedAccessKey,
universalUnidentifiedAccess,
AppCapabilities.getCapabilities(true));
UUID uuid = UuidUtil.parseOrThrow(response.getUuid());
boolean hasPin = response.isStorageCapable();
IdentityKeyPair identityKey = IdentityKeyUtil.getIdentityKeyPair(context);
List<PreKeyRecord> records = PreKeyUtil.generatePreKeys(context);
@@ -259,7 +263,7 @@ public final class CodeVerificationRequest {
TextSecurePreferences.setPromptedPushRegistration(context, true);
TextSecurePreferences.setUnauthorizedReceived(context, false);
PinState.onRegistration(context, kbsData, pin);
PinState.onRegistration(context, kbsData, pin, hasPin);
}
private static @Nullable ProfileKey findExistingProfileKey(@NonNull Context context, @NonNull String e164number) {

View File

@@ -12,7 +12,7 @@ public final class KeyBackupSystemWrongPinException extends Exception {
this.tokenResponse = tokenResponse;
}
@NonNull TokenResponse getTokenResponse() {
public @NonNull TokenResponse getTokenResponse() {
return tokenResponse;
}
}