Check password blacklist when setting credential

If the password is valid by all other checks, see if it is present on
the blacklist and disallow it if it is.

Test: set a password blacklist, try and set a blacklisted password and
see an explanation, set a non-blacklisted password successfully.
Test: make ROBOTEST_FILTER=ChooseLockPasswordTest RunSettingsRoboTests

Bug: 63578054
Fix: 65659151
Change-Id: Id155b824ad4b5839c23b6f5fd3fdfdcfc78c3df1
This commit is contained in:
Alexandru-Andrei Rotaru
2017-08-07 12:21:31 +01:00
committed by Andrew Scull
parent 3a2573b812
commit aeb3e4473b
4 changed files with 83 additions and 24 deletions

View File

@@ -127,6 +127,36 @@ public class ChooseLockPasswordTest {
.isEqualTo(123);
}
@Test
public void blacklist_addsErrorMessageForPin() {
final ChooseLockPassword activity = buildChooseLockPasswordActivity(
new IntentBuilder(application)
.setUserId(UserHandle.myUserId())
// Set to numeric for a PIN
.setPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC)
.build());
final ChooseLockPasswordFragment fragment = getChooseLockPasswordFragment(activity);
final int errors = ChooseLockPasswordFragment.BLACKLISTED;
final String[] messages = fragment.convertErrorCodeToMessages(errors);
assertThat(messages).isEqualTo(new String[] {
activity.getString(R.string.lockpassword_pin_blacklisted_by_admin) });
}
@Test
public void blacklist_addsErrorMessageForPassword() {
final ChooseLockPassword activity = buildChooseLockPasswordActivity(
new IntentBuilder(application)
.setUserId(UserHandle.myUserId())
// Set to alphabetic for a password
.setPasswordQuality(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC)
.build());
final ChooseLockPasswordFragment fragment = getChooseLockPasswordFragment(activity);
final int errors = ChooseLockPasswordFragment.BLACKLISTED;
final String[] messages = fragment.convertErrorCodeToMessages(errors);
assertThat(messages).isEqualTo(new String[] {
activity.getString(R.string.lockpassword_password_blacklisted_by_admin) });
}
@Test
public void assertThat_chooseLockIconChanged_WhenFingerprintExtraSet() {
ShadowDrawable drawable = setActivityAndGetIconDrawable(true);
@@ -139,17 +169,22 @@ public class ChooseLockPasswordTest {
assertThat(drawable.getCreatedFromResId()).isNotEqualTo(R.drawable.ic_fingerprint_header);
}
private ChooseLockPassword buildChooseLockPasswordActivity(Intent intent) {
return Robolectric.buildActivity(ChooseLockPassword.class, intent).setup().get();
}
private ChooseLockPasswordFragment getChooseLockPasswordFragment(ChooseLockPassword activity) {
return (ChooseLockPasswordFragment)
activity.getFragmentManager().findFragmentById(R.id.main_content);
}
private ShadowDrawable setActivityAndGetIconDrawable(boolean addFingerprintExtra) {
ChooseLockPassword passwordActivity =
Robolectric.buildActivity(
ChooseLockPassword.class,
new IntentBuilder(application)
.setUserId(UserHandle.myUserId())
.setForFingerprint(addFingerprintExtra)
.build())
.setup().get();
ChooseLockPasswordFragment fragment = (ChooseLockPasswordFragment)
passwordActivity.getFragmentManager().findFragmentById(R.id.main_content);
ChooseLockPassword passwordActivity = buildChooseLockPasswordActivity(
new IntentBuilder(application)
.setUserId(UserHandle.myUserId())
.setForFingerprint(addFingerprintExtra)
.build());
ChooseLockPasswordFragment fragment = getChooseLockPasswordFragment(passwordActivity);
return Shadows.shadowOf(((GlifLayout) fragment.getView()).getIcon());
}
}