Merge "ChooseLockPassword: convert to use PasswordMetrics#validateCredential()" into main am: 00f5d9e7a6
am: 335752ed98
am: be262063a7
am: a6448e9389
Original change: https://android-review.googlesource.com/c/platform/packages/apps/Settings/+/2776714 Change-Id: Ifade3ffd8878fc8c738ffa1eb927d2f3507fc643 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -733,18 +733,17 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Validates PIN/Password and returns the validation result and updates mValidationErrors
|
* Validates PIN/Password and returns the validation result and updates mValidationErrors
|
||||||
* and mPasswordReused to reflect validation results.
|
* to reflect validation results.
|
||||||
*
|
*
|
||||||
* @param credential credential the user typed in.
|
* @param credential credential the user typed in.
|
||||||
* @return whether password satisfies all the requirements.
|
* @return whether password satisfies all the requirements.
|
||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
boolean validatePassword(LockscreenCredential credential) {
|
boolean validatePassword(LockscreenCredential credential) {
|
||||||
final byte[] password = credential.getCredential();
|
mValidationErrors = PasswordMetrics.validateCredential(mMinMetrics, mMinComplexity,
|
||||||
mValidationErrors = PasswordMetrics.validatePassword(
|
credential);
|
||||||
mMinMetrics, mMinComplexity, !mIsAlphaMode, password);
|
if (mValidationErrors.isEmpty() && mLockPatternUtils.checkPasswordHistory(
|
||||||
if (mValidationErrors.isEmpty() && mLockPatternUtils.checkPasswordHistory(
|
credential.getCredential(), getPasswordHistoryHashFactor(), mUserId)) {
|
||||||
password, getPasswordHistoryHashFactor(), mUserId)) {
|
|
||||||
mValidationErrors =
|
mValidationErrors =
|
||||||
Collections.singletonList(new PasswordValidationError(RECENTLY_USED));
|
Collections.singletonList(new PasswordValidationError(RECENTLY_USED));
|
||||||
}
|
}
|
||||||
@@ -921,8 +920,8 @@ public class ChooseLockPassword extends SettingsActivity {
|
|||||||
final boolean canInput = mSaveAndFinishWorker == null;
|
final boolean canInput = mSaveAndFinishWorker == null;
|
||||||
|
|
||||||
LockscreenCredential password = mIsAlphaMode
|
LockscreenCredential password = mIsAlphaMode
|
||||||
? LockscreenCredential.createPasswordOrNone(mPasswordEntry.getText())
|
? LockscreenCredential.createPassword(mPasswordEntry.getText())
|
||||||
: LockscreenCredential.createPinOrNone(mPasswordEntry.getText());
|
: LockscreenCredential.createPin(mPasswordEntry.getText());
|
||||||
final int length = password.size();
|
final int length = password.size();
|
||||||
if (mUiStage == Stage.Introduction) {
|
if (mUiStage == Stage.Introduction) {
|
||||||
mPasswordRestrictionView.setVisibility(View.VISIBLE);
|
mPasswordRestrictionView.setVisibility(View.VISIBLE);
|
||||||
|
@@ -177,6 +177,24 @@ public class ChooseLockPasswordTest {
|
|||||||
assertThat(flags & FLAG_SECURE).isEqualTo(FLAG_SECURE);
|
assertThat(flags & FLAG_SECURE).isEqualTo(FLAG_SECURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void processAndValidatePasswordRequirements_cannotIncludeInvalidChar() {
|
||||||
|
PasswordPolicy policy = new PasswordPolicy();
|
||||||
|
policy.quality = PASSWORD_QUALITY_UNSPECIFIED;
|
||||||
|
// Only ASCII 31–127 should be allowed. The invalid character error should also take
|
||||||
|
// priority over the error that says the password is too short.
|
||||||
|
String[] passwords = new String[] { "§µ¿¶¥£", "™™™™", "\n\n\n\n", "¡", "é" };
|
||||||
|
|
||||||
|
for (String password : passwords) {
|
||||||
|
assertPasswordValidationResult(
|
||||||
|
/* minMetrics */ policy.getMinMetrics(),
|
||||||
|
/* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
|
||||||
|
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||||
|
/* userEnteredPassword= */ LockscreenCredential.createPassword(password),
|
||||||
|
"This can't include an invalid character");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void processAndValidatePasswordRequirements_noMinPasswordComplexity() {
|
public void processAndValidatePasswordRequirements_noMinPasswordComplexity() {
|
||||||
PasswordPolicy policy = new PasswordPolicy();
|
PasswordPolicy policy = new PasswordPolicy();
|
||||||
@@ -187,7 +205,7 @@ public class ChooseLockPasswordTest {
|
|||||||
/* minMetrics */ policy.getMinMetrics(),
|
/* minMetrics */ policy.getMinMetrics(),
|
||||||
/* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
|
/* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
|
||||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
/* userEnteredPassword= */ LockscreenCredential.createPassword(""),
|
||||||
"Must contain at least 1 non-numerical character",
|
"Must contain at least 1 non-numerical character",
|
||||||
"Must be at least 10 characters");
|
"Must be at least 10 characters");
|
||||||
}
|
}
|
||||||
@@ -201,7 +219,7 @@ public class ChooseLockPasswordTest {
|
|||||||
/* minMetrics */ policy.getMinMetrics(),
|
/* minMetrics */ policy.getMinMetrics(),
|
||||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
/* userEnteredPassword= */ LockscreenCredential.createPin(""),
|
||||||
"PIN must be at least 8 digits");
|
"PIN must be at least 8 digits");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,7 +232,7 @@ public class ChooseLockPasswordTest {
|
|||||||
/* minMetrics */ policy.getMinMetrics(),
|
/* minMetrics */ policy.getMinMetrics(),
|
||||||
/* minComplexity= */ PASSWORD_COMPLEXITY_MEDIUM,
|
/* minComplexity= */ PASSWORD_COMPLEXITY_MEDIUM,
|
||||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
/* userEnteredPassword= */ LockscreenCredential.createPassword(""),
|
||||||
"Must be at least 4 characters");
|
"Must be at least 4 characters");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,7 +246,7 @@ public class ChooseLockPasswordTest {
|
|||||||
/* minMetrics */ policy.getMinMetrics(),
|
/* minMetrics */ policy.getMinMetrics(),
|
||||||
/* minComplexity= */ PASSWORD_COMPLEXITY_LOW,
|
/* minComplexity= */ PASSWORD_COMPLEXITY_LOW,
|
||||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
/* userEnteredPassword= */ LockscreenCredential.createPassword(""),
|
||||||
"Must contain at least 1 non-numerical character",
|
"Must contain at least 1 non-numerical character",
|
||||||
"Must contain at least 1 numerical digit",
|
"Must contain at least 1 numerical digit",
|
||||||
"Must be at least 9 characters");
|
"Must be at least 9 characters");
|
||||||
@@ -244,7 +262,7 @@ public class ChooseLockPasswordTest {
|
|||||||
/* minMetrics */ policy.getMinMetrics(),
|
/* minMetrics */ policy.getMinMetrics(),
|
||||||
/* minComplexity= */ PASSWORD_COMPLEXITY_MEDIUM,
|
/* minComplexity= */ PASSWORD_COMPLEXITY_MEDIUM,
|
||||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
/* userEnteredPassword= */ LockscreenCredential.createPin(""),
|
||||||
"PIN must be at least 11 digits");
|
"PIN must be at least 11 digits");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,7 +276,7 @@ public class ChooseLockPasswordTest {
|
|||||||
/* minMetrics */ policy.getMinMetrics(),
|
/* minMetrics */ policy.getMinMetrics(),
|
||||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
/* userEnteredPassword= */ LockscreenCredential.createPassword(""),
|
||||||
"Must contain at least 2 special symbols",
|
"Must contain at least 2 special symbols",
|
||||||
"Must be at least 6 characters",
|
"Must be at least 6 characters",
|
||||||
"Must contain at least 1 letter",
|
"Must contain at least 1 letter",
|
||||||
@@ -344,7 +362,7 @@ public class ChooseLockPasswordTest {
|
|||||||
/* minMetrics */ policy.getMinMetrics(),
|
/* minMetrics */ policy.getMinMetrics(),
|
||||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
/* userEnteredPassword= */ LockscreenCredential.createPassword(""),
|
||||||
"Must be at least 6 characters",
|
"Must be at least 6 characters",
|
||||||
"If using only numbers, must be at least 8 digits");
|
"If using only numbers, must be at least 8 digits");
|
||||||
}
|
}
|
||||||
@@ -424,7 +442,7 @@ public class ChooseLockPasswordTest {
|
|||||||
/* minMetrics */ null,
|
/* minMetrics */ null,
|
||||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
/* userEnteredPassword= */ LockscreenCredential.createPin(""),
|
||||||
"PIN must be at least 8 digits");
|
"PIN must be at least 8 digits");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user