ChooseLockPassword: convert to use PasswordMetrics#validateCredential()
Fix the check for invalid characters in new passwords by switching from
PasswordMetrics#validatePassword() to
PasswordMetrics#validateCredential(). For more information, see
frameworks/base change I5c3c55367c3a294578cd0f97ac0e315a11ed517e.
Bug: 219511761
Bug: 232900169
Bug: 243881358
Test: Verified no regressions in 'atest ChooseLockPasswordTest'. Note,
this test is currently @Ignored and has 2 failures. I didn't
attempt to address that.
Test: Set a password containing non-ASCII characters on a device running
an older build. Upgraded and verified unlocking still works.
Tested that setting a new non-ASCII password is not allowed.
Change-Id: I5f1822a34688473cb103eb64dca56e4c19d4dd08
Merged-In: I5f1822a34688473cb103eb64dca56e4c19d4dd08
(cherry picked from commit b547094366)
This commit is contained in:
@@ -184,6 +184,24 @@ public class ChooseLockPasswordTest {
|
||||
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
|
||||
public void processAndValidatePasswordRequirements_noMinPasswordComplexity() {
|
||||
PasswordPolicy policy = new PasswordPolicy();
|
||||
@@ -194,7 +212,7 @@ public class ChooseLockPasswordTest {
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword(""),
|
||||
"Must contain at least 1 non-numerical character",
|
||||
"Must be at least 10 characters");
|
||||
}
|
||||
@@ -208,7 +226,7 @@ public class ChooseLockPasswordTest {
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPin(""),
|
||||
"PIN must be at least 8 digits");
|
||||
}
|
||||
|
||||
@@ -221,7 +239,7 @@ public class ChooseLockPasswordTest {
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_MEDIUM,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword(""),
|
||||
"Must be at least 4 characters");
|
||||
}
|
||||
|
||||
@@ -235,7 +253,7 @@ public class ChooseLockPasswordTest {
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_LOW,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword(""),
|
||||
"Must contain at least 1 non-numerical character",
|
||||
"Must contain at least 1 numerical digit",
|
||||
"Must be at least 9 characters");
|
||||
@@ -251,7 +269,7 @@ public class ChooseLockPasswordTest {
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_MEDIUM,
|
||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPin(""),
|
||||
"PIN must be at least 11 digits");
|
||||
}
|
||||
|
||||
@@ -265,7 +283,7 @@ public class ChooseLockPasswordTest {
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword(""),
|
||||
"Must contain at least 2 special symbols",
|
||||
"Must be at least 6 characters",
|
||||
"Must contain at least 1 letter",
|
||||
@@ -351,7 +369,7 @@ public class ChooseLockPasswordTest {
|
||||
/* minMetrics */ policy.getMinMetrics(),
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_ALPHABETIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPassword(""),
|
||||
"Must be at least 6 characters",
|
||||
"If using only numbers, must be at least 8 digits");
|
||||
}
|
||||
@@ -448,7 +466,7 @@ public class ChooseLockPasswordTest {
|
||||
/* minMetrics */ null,
|
||||
/* minComplexity= */ PASSWORD_COMPLEXITY_HIGH,
|
||||
/* passwordType= */ PASSWORD_QUALITY_NUMERIC,
|
||||
/* userEnteredPassword= */ LockscreenCredential.createNone(),
|
||||
/* userEnteredPassword= */ LockscreenCredential.createPin(""),
|
||||
"PIN must be at least 8 digits");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user