Merge "Add command to require strong auth" am: de6f930c61 am: eea4573539

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2056513

Change-Id: Ib2d8d5e89234a68e154d7b193f48a37712fb1903
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Wenhao Wang
2022-04-07 08:05:39 +00:00
committed by Automerger Merge Worker
2 changed files with 45 additions and 0 deletions

View File

@@ -18,12 +18,14 @@ package com.android.server.locksettings;
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_NONE;
import static com.android.internal.widget.LockPatternUtils.CREDENTIAL_TYPE_PATTERN;
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
import android.app.ActivityManager;
import android.app.admin.PasswordMetrics;
import android.content.Context;
import android.os.ShellCommand;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.text.TextUtils;
import android.util.Slog;
@@ -48,6 +50,8 @@ class LockSettingsShellCommand extends ShellCommand {
private static final String COMMAND_REMOVE_CACHE = "remove-cache";
private static final String COMMAND_SET_ROR_PROVIDER_PACKAGE =
"set-resume-on-reboot-provider-package";
private static final String COMMAND_REQUIRE_STRONG_AUTH =
"require-strong-auth";
private static final String COMMAND_HELP = "help";
private int mCurrentUserId;
@@ -97,6 +101,9 @@ class LockSettingsShellCommand extends ShellCommand {
case COMMAND_SET_ROR_PROVIDER_PACKAGE:
runSetResumeOnRebootProviderPackage();
return 0;
case COMMAND_REQUIRE_STRONG_AUTH:
runRequireStrongAuth();
return 0;
case COMMAND_HELP:
onHelp();
return 0;
@@ -192,6 +199,10 @@ class LockSettingsShellCommand extends ShellCommand {
pw.println(" Sets the package name for server based resume on reboot service "
+ "provider.");
pw.println("");
pw.println(" require-strong-auth [--user USER_ID] <reason>");
pw.println(" Requires the strong authentication. The current supported reasons: "
+ "STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN.");
pw.println("");
}
}
@@ -288,6 +299,24 @@ class LockSettingsShellCommand extends ShellCommand {
return true;
}
private boolean runRequireStrongAuth() {
final String reason = mNew;
int strongAuthReason;
switch (reason) {
case "STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN":
strongAuthReason = STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
mCurrentUserId = UserHandle.USER_ALL;
break;
default:
getErrPrintWriter().println("Unsupported reason: " + reason);
return false;
}
mLockPatternUtils.requireStrongAuth(strongAuthReason, mCurrentUserId);
getOutPrintWriter().println("Require strong auth for USER_ID "
+ mCurrentUserId + " because of " + mNew);
return true;
}
private boolean runClear() {
LockscreenCredential none = LockscreenCredential.createNone();
if (!isNewCredentialSufficient(none)) {

View File

@@ -25,6 +25,8 @@ import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
import static junit.framework.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -48,6 +50,7 @@ import android.os.Looper;
import android.os.Process;
import android.os.ResultReceiver;
import android.os.ShellCallback;
import android.os.UserHandle;
import android.platform.test.annotations.Presubmit;
import androidx.test.InstrumentationRegistry;
@@ -370,6 +373,19 @@ public class LockSettingsShellCommandTest {
mUserId);
}
@Test
public void testRequireStrongAuth_STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN() throws Exception {
when(mLockPatternUtils.isSecure(mUserId)).thenReturn(true);
assertEquals(0, mCommand.exec(new Binder(), in, out, err,
new String[] { "require-strong-auth", "STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN"},
mShellCallback, mResultReceiver));
verify(mLockPatternUtils).requireStrongAuth(
STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN,
UserHandle.USER_ALL);
}
private List<LockPatternView.Cell> stringToPattern(String str) {
return LockPatternUtils.byteArrayToPattern(str.getBytes());
}