Merge "Remove capability checks for cred desc apis." into udc-dev
This commit is contained in:
@@ -33,7 +33,6 @@ import android.content.pm.ServiceInfo;
|
|||||||
import android.credentials.ClearCredentialStateRequest;
|
import android.credentials.ClearCredentialStateRequest;
|
||||||
import android.credentials.CreateCredentialException;
|
import android.credentials.CreateCredentialException;
|
||||||
import android.credentials.CreateCredentialRequest;
|
import android.credentials.CreateCredentialRequest;
|
||||||
import android.credentials.CredentialDescription;
|
|
||||||
import android.credentials.CredentialManager;
|
import android.credentials.CredentialManager;
|
||||||
import android.credentials.CredentialOption;
|
import android.credentials.CredentialOption;
|
||||||
import android.credentials.CredentialProviderInfo;
|
import android.credentials.CredentialProviderInfo;
|
||||||
@@ -296,11 +295,6 @@ public final class CredentialManagerService
|
|||||||
mContext,
|
mContext,
|
||||||
UserHandle.getCallingUserId(),
|
UserHandle.getCallingUserId(),
|
||||||
session,
|
session,
|
||||||
CredentialProviderInfoFactory.getCredentialProviderFromPackageName(
|
|
||||||
mContext, UserHandle.getCallingUserId() ,
|
|
||||||
result.second.mPackageName,
|
|
||||||
CredentialManager.PROVIDER_FILTER_ALL_PROVIDERS,
|
|
||||||
new HashSet<>()),
|
|
||||||
session.mClientAppInfo,
|
session.mClientAppInfo,
|
||||||
result.second.mPackageName,
|
result.second.mPackageName,
|
||||||
result.first));
|
result.first));
|
||||||
@@ -752,44 +746,6 @@ public final class CredentialManagerService
|
|||||||
|
|
||||||
enforceCallingPackage(callingPackage, Binder.getCallingUid());
|
enforceCallingPackage(callingPackage, Binder.getCallingUid());
|
||||||
|
|
||||||
List<CredentialProviderInfo> services =
|
|
||||||
getServicesForCredentialDescription(UserHandle.getCallingUserId());
|
|
||||||
|
|
||||||
List<String> providers =
|
|
||||||
services.stream()
|
|
||||||
.map(
|
|
||||||
credentialProviderInfo ->
|
|
||||||
credentialProviderInfo.getServiceInfo().packageName)
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
if (!providers.contains(callingPackage)) {
|
|
||||||
throw new NonCredentialProviderCallerException(callingPackage);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<CredentialProviderInfo> matchingService =
|
|
||||||
services.stream()
|
|
||||||
.filter(
|
|
||||||
credentialProviderInfo ->
|
|
||||||
credentialProviderInfo
|
|
||||||
.getServiceInfo()
|
|
||||||
.packageName
|
|
||||||
.equals(callingPackage))
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
CredentialProviderInfo credentialProviderInfo = matchingService.get(0);
|
|
||||||
|
|
||||||
Set<String> supportedTypes =
|
|
||||||
request.getCredentialDescriptions().stream()
|
|
||||||
.map(CredentialDescription::getType)
|
|
||||||
.filter(credentialProviderInfo::hasCapability)
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
|
|
||||||
if (supportedTypes.size() != request.getCredentialDescriptions().size()) {
|
|
||||||
throw new IllegalArgumentException(
|
|
||||||
"CredentialProvider does not support one or more"
|
|
||||||
+ "of the registered types. Check your XML entry.");
|
|
||||||
}
|
|
||||||
|
|
||||||
CredentialDescriptionRegistry session =
|
CredentialDescriptionRegistry session =
|
||||||
CredentialDescriptionRegistry.forUser(UserHandle.getCallingUserId());
|
CredentialDescriptionRegistry.forUser(UserHandle.getCallingUserId());
|
||||||
|
|
||||||
@@ -808,20 +764,6 @@ public final class CredentialManagerService
|
|||||||
|
|
||||||
enforceCallingPackage(callingPackage, Binder.getCallingUid());
|
enforceCallingPackage(callingPackage, Binder.getCallingUid());
|
||||||
|
|
||||||
List<CredentialProviderInfo> services =
|
|
||||||
getServicesForCredentialDescription(UserHandle.getCallingUserId());
|
|
||||||
|
|
||||||
List<String> providers =
|
|
||||||
services.stream()
|
|
||||||
.map(
|
|
||||||
credentialProviderInfo ->
|
|
||||||
credentialProviderInfo.getServiceInfo().packageName)
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
if (!providers.contains(callingPackage)) {
|
|
||||||
throw new NonCredentialProviderCallerException(callingPackage);
|
|
||||||
}
|
|
||||||
|
|
||||||
CredentialDescriptionRegistry session =
|
CredentialDescriptionRegistry session =
|
||||||
CredentialDescriptionRegistry.forUser(UserHandle.getCallingUserId());
|
CredentialDescriptionRegistry.forUser(UserHandle.getCallingUserId());
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,8 @@ public final class ProviderClearSession extends ProviderSession<ClearCredential
|
|||||||
ProviderInternalCallback callbacks,
|
ProviderInternalCallback callbacks,
|
||||||
int userId, RemoteCredentialService remoteCredentialService,
|
int userId, RemoteCredentialService remoteCredentialService,
|
||||||
ClearCredentialStateRequest providerRequest) {
|
ClearCredentialStateRequest providerRequest) {
|
||||||
super(context, info, providerRequest, callbacks, userId, remoteCredentialService);
|
super(context, providerRequest, callbacks, info.getComponentName(),
|
||||||
|
userId, remoteCredentialService);
|
||||||
setStatus(Status.PENDING);
|
setStatus(Status.PENDING);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +96,7 @@ public final class ProviderClearSession extends ProviderSession<ClearCredential
|
|||||||
/** Called when provider service dies. */
|
/** Called when provider service dies. */
|
||||||
@Override // Callback from the remote provider
|
@Override // Callback from the remote provider
|
||||||
public void onProviderServiceDied(RemoteCredentialService service) {
|
public void onProviderServiceDied(RemoteCredentialService service) {
|
||||||
if (service.getComponentName().equals(mProviderInfo.getServiceInfo().getComponentName())) {
|
if (service.getComponentName().equals(mComponentName)) {
|
||||||
updateStatusAndInvokeCallback(Status.SERVICE_DEAD);
|
updateStatusAndInvokeCallback(Status.SERVICE_DEAD);
|
||||||
} else {
|
} else {
|
||||||
Slog.i(TAG, "Component names different in onProviderServiceDied - "
|
Slog.i(TAG, "Component names different in onProviderServiceDied - "
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ public final class ProviderCreateSession extends ProviderSession<
|
|||||||
@NonNull BeginCreateCredentialRequest beginCreateRequest,
|
@NonNull BeginCreateCredentialRequest beginCreateRequest,
|
||||||
@NonNull CreateCredentialRequest completeCreateRequest,
|
@NonNull CreateCredentialRequest completeCreateRequest,
|
||||||
String hybridService) {
|
String hybridService) {
|
||||||
super(context, info, beginCreateRequest, callbacks, userId,
|
super(context, beginCreateRequest, callbacks, info.getComponentName(), userId,
|
||||||
remoteCredentialService);
|
remoteCredentialService);
|
||||||
mCompleteRequest = completeCreateRequest;
|
mCompleteRequest = completeCreateRequest;
|
||||||
setStatus(Status.PENDING);
|
setStatus(Status.PENDING);
|
||||||
@@ -161,7 +161,7 @@ public final class ProviderCreateSession extends ProviderSession<
|
|||||||
/** Called when provider service dies. */
|
/** Called when provider service dies. */
|
||||||
@Override
|
@Override
|
||||||
public void onProviderServiceDied(RemoteCredentialService service) {
|
public void onProviderServiceDied(RemoteCredentialService service) {
|
||||||
if (service.getComponentName().equals(mProviderInfo.getServiceInfo().getComponentName())) {
|
if (service.getComponentName().equals(mComponentName)) {
|
||||||
updateStatusAndInvokeCallback(Status.SERVICE_DEAD);
|
updateStatusAndInvokeCallback(Status.SERVICE_DEAD);
|
||||||
} else {
|
} else {
|
||||||
Slog.i(TAG, "Component names different in onProviderServiceDied - "
|
Slog.i(TAG, "Component names different in onProviderServiceDied - "
|
||||||
|
|||||||
@@ -169,7 +169,8 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential
|
|||||||
CallingAppInfo callingAppInfo,
|
CallingAppInfo callingAppInfo,
|
||||||
Map<String, CredentialOption> beginGetOptionToCredentialOptionMap,
|
Map<String, CredentialOption> beginGetOptionToCredentialOptionMap,
|
||||||
String hybridService) {
|
String hybridService) {
|
||||||
super(context, info, beginGetRequest, callbacks, userId, remoteCredentialService);
|
super(context, beginGetRequest, callbacks, info.getComponentName() ,
|
||||||
|
userId, remoteCredentialService);
|
||||||
mCompleteRequest = completeGetRequest;
|
mCompleteRequest = completeGetRequest;
|
||||||
mCallingAppInfo = callingAppInfo;
|
mCallingAppInfo = callingAppInfo;
|
||||||
setStatus(Status.PENDING);
|
setStatus(Status.PENDING);
|
||||||
@@ -196,7 +197,7 @@ public final class ProviderGetSession extends ProviderSession<BeginGetCredential
|
|||||||
/** Called when provider service dies. */
|
/** Called when provider service dies. */
|
||||||
@Override // Callback from the remote provider
|
@Override // Callback from the remote provider
|
||||||
public void onProviderServiceDied(RemoteCredentialService service) {
|
public void onProviderServiceDied(RemoteCredentialService service) {
|
||||||
if (service.getComponentName().equals(mProviderInfo.getServiceInfo().getComponentName())) {
|
if (service.getComponentName().equals(mComponentName)) {
|
||||||
updateStatusAndInvokeCallback(Status.SERVICE_DEAD);
|
updateStatusAndInvokeCallback(Status.SERVICE_DEAD);
|
||||||
} else {
|
} else {
|
||||||
Slog.i(TAG, "Component names different in onProviderServiceDied - "
|
Slog.i(TAG, "Component names different in onProviderServiceDied - "
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ package com.android.server.credentials;
|
|||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.annotation.UserIdInt;
|
import android.annotation.UserIdInt;
|
||||||
|
import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.credentials.CredentialOption;
|
import android.credentials.CredentialOption;
|
||||||
import android.credentials.CredentialProviderInfo;
|
|
||||||
import android.credentials.GetCredentialException;
|
import android.credentials.GetCredentialException;
|
||||||
import android.credentials.GetCredentialResponse;
|
import android.credentials.GetCredentialResponse;
|
||||||
import android.credentials.ui.Entry;
|
import android.credentials.ui.Entry;
|
||||||
@@ -64,7 +64,6 @@ public class ProviderRegistryGetSession extends ProviderSession<CredentialOption
|
|||||||
@NonNull Context context,
|
@NonNull Context context,
|
||||||
@UserIdInt int userId,
|
@UserIdInt int userId,
|
||||||
@NonNull GetRequestSession getRequestSession,
|
@NonNull GetRequestSession getRequestSession,
|
||||||
@NonNull CredentialProviderInfo credentialProviderInfo,
|
|
||||||
@NonNull CallingAppInfo callingAppInfo,
|
@NonNull CallingAppInfo callingAppInfo,
|
||||||
@NonNull String credentialProviderPackageName,
|
@NonNull String credentialProviderPackageName,
|
||||||
@NonNull CredentialOption requestOption) {
|
@NonNull CredentialOption requestOption) {
|
||||||
@@ -72,7 +71,6 @@ public class ProviderRegistryGetSession extends ProviderSession<CredentialOption
|
|||||||
context,
|
context,
|
||||||
userId,
|
userId,
|
||||||
getRequestSession,
|
getRequestSession,
|
||||||
credentialProviderInfo,
|
|
||||||
callingAppInfo,
|
callingAppInfo,
|
||||||
credentialProviderPackageName,
|
credentialProviderPackageName,
|
||||||
requestOption);
|
requestOption);
|
||||||
@@ -94,11 +92,12 @@ public class ProviderRegistryGetSession extends ProviderSession<CredentialOption
|
|||||||
protected ProviderRegistryGetSession(@NonNull Context context,
|
protected ProviderRegistryGetSession(@NonNull Context context,
|
||||||
@NonNull int userId,
|
@NonNull int userId,
|
||||||
@NonNull GetRequestSession session,
|
@NonNull GetRequestSession session,
|
||||||
@NonNull CredentialProviderInfo credentialProviderInfo,
|
|
||||||
@NonNull CallingAppInfo callingAppInfo,
|
@NonNull CallingAppInfo callingAppInfo,
|
||||||
@NonNull String servicePackageName,
|
@NonNull String servicePackageName,
|
||||||
@NonNull CredentialOption requestOption) {
|
@NonNull CredentialOption requestOption) {
|
||||||
super(context, credentialProviderInfo, requestOption, session, userId, null);
|
super(context, requestOption, session,
|
||||||
|
new ComponentName(servicePackageName, servicePackageName) ,
|
||||||
|
userId, null);
|
||||||
mCredentialDescriptionRegistry = CredentialDescriptionRegistry.forUser(userId);
|
mCredentialDescriptionRegistry = CredentialDescriptionRegistry.forUser(userId);
|
||||||
mCallingAppInfo = callingAppInfo;
|
mCallingAppInfo = callingAppInfo;
|
||||||
mCredentialProviderPackageName = servicePackageName;
|
mCredentialProviderPackageName = servicePackageName;
|
||||||
|
|||||||
@@ -114,17 +114,18 @@ public abstract class ProviderSession<T, R>
|
|||||||
@Nullable String message);
|
@Nullable String message);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ProviderSession(@NonNull Context context, @Nullable CredentialProviderInfo info,
|
protected ProviderSession(@NonNull Context context,
|
||||||
@NonNull T providerRequest,
|
@NonNull T providerRequest,
|
||||||
@Nullable ProviderInternalCallback callbacks,
|
@Nullable ProviderInternalCallback callbacks,
|
||||||
|
@NonNull ComponentName componentName,
|
||||||
@NonNull int userId,
|
@NonNull int userId,
|
||||||
@Nullable RemoteCredentialService remoteCredentialService) {
|
@Nullable RemoteCredentialService remoteCredentialService) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mProviderInfo = info;
|
mProviderInfo = null;
|
||||||
mProviderRequest = providerRequest;
|
mProviderRequest = providerRequest;
|
||||||
mCallbacks = callbacks;
|
mCallbacks = callbacks;
|
||||||
mUserId = userId;
|
mUserId = userId;
|
||||||
mComponentName = info.getServiceInfo().getComponentName();
|
mComponentName = componentName;
|
||||||
mRemoteCredentialService = remoteCredentialService;
|
mRemoteCredentialService = remoteCredentialService;
|
||||||
mCandidateProviderMetric = new CandidatePhaseMetric();
|
mCandidateProviderMetric = new CandidatePhaseMetric();
|
||||||
mProviderSessionUid = MetricUtilities.getPackageUid(mContext, mComponentName);
|
mProviderSessionUid = MetricUtilities.getPackageUid(mContext, mComponentName);
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ import android.content.pm.SigningDetails;
|
|||||||
import android.content.pm.SigningInfo;
|
import android.content.pm.SigningInfo;
|
||||||
import android.credentials.Credential;
|
import android.credentials.Credential;
|
||||||
import android.credentials.CredentialOption;
|
import android.credentials.CredentialOption;
|
||||||
import android.credentials.CredentialProviderInfo;
|
|
||||||
import android.credentials.GetCredentialException;
|
import android.credentials.GetCredentialException;
|
||||||
import android.credentials.GetCredentialResponse;
|
import android.credentials.GetCredentialResponse;
|
||||||
import android.credentials.ui.GetCredentialProviderData;
|
import android.credentials.ui.GetCredentialProviderData;
|
||||||
@@ -45,7 +44,6 @@ import android.net.Uri;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.service.credentials.CallingAppInfo;
|
import android.service.credentials.CallingAppInfo;
|
||||||
import android.service.credentials.CredentialEntry;
|
import android.service.credentials.CredentialEntry;
|
||||||
import android.service.credentials.CredentialProviderInfoFactory;
|
|
||||||
import android.service.credentials.CredentialProviderService;
|
import android.service.credentials.CredentialProviderService;
|
||||||
import android.service.credentials.GetCredentialRequest;
|
import android.service.credentials.GetCredentialRequest;
|
||||||
|
|
||||||
@@ -61,7 +59,6 @@ import org.mockito.Mock;
|
|||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
|
||||||
import java.security.cert.CertificateException;
|
import java.security.cert.CertificateException;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -89,7 +86,6 @@ public class ProviderRegistryGetSessionTest {
|
|||||||
@Mock private GetRequestSession mGetRequestSession;
|
@Mock private GetRequestSession mGetRequestSession;
|
||||||
private CredentialOption mGetCredentialOption;
|
private CredentialOption mGetCredentialOption;
|
||||||
@Mock private ServiceInfo mServiceInfo;
|
@Mock private ServiceInfo mServiceInfo;
|
||||||
private CredentialProviderInfo mCredentialProviderInfo;
|
|
||||||
private CallingAppInfo mCallingAppInfo;
|
private CallingAppInfo mCallingAppInfo;
|
||||||
@Mock private CredentialDescriptionRegistry mCredentialDescriptionRegistry;
|
@Mock private CredentialDescriptionRegistry mCredentialDescriptionRegistry;
|
||||||
private Bundle mRetrievalData;
|
private Bundle mRetrievalData;
|
||||||
@@ -111,12 +107,6 @@ public class ProviderRegistryGetSessionTest {
|
|||||||
mGetCredentialOption = new CredentialOption(CREDENTIAL_TYPE, mRetrievalData,
|
mGetCredentialOption = new CredentialOption(CREDENTIAL_TYPE, mRetrievalData,
|
||||||
new Bundle(), false);
|
new Bundle(), false);
|
||||||
when(mServiceInfo.getComponentName()).thenReturn(CREDENTIAL_PROVIDER_COMPONENT);
|
when(mServiceInfo.getComponentName()).thenReturn(CREDENTIAL_PROVIDER_COMPONENT);
|
||||||
mCredentialProviderInfo = CredentialProviderInfoFactory
|
|
||||||
.createForTests(mServiceInfo,
|
|
||||||
/* overrideLabel= */ "test",
|
|
||||||
/* isSystemProvider= */ false,
|
|
||||||
/* isEnabled= */ true,
|
|
||||||
/* capabilities= */ Collections.EMPTY_LIST);
|
|
||||||
CredentialDescriptionRegistry.setSession(USER_ID_1, mCredentialDescriptionRegistry);
|
CredentialDescriptionRegistry.setSession(USER_ID_1, mCredentialDescriptionRegistry);
|
||||||
mResponse = new HashSet<>();
|
mResponse = new HashSet<>();
|
||||||
mSlice = createSlice();
|
mSlice = createSlice();
|
||||||
@@ -130,7 +120,7 @@ public class ProviderRegistryGetSessionTest {
|
|||||||
when(mCredentialDescriptionRegistry.getFilteredResultForProvider(anyString(), anyString()))
|
when(mCredentialDescriptionRegistry.getFilteredResultForProvider(anyString(), anyString()))
|
||||||
.thenReturn(mResponse);
|
.thenReturn(mResponse);
|
||||||
mProviderRegistryGetSession = ProviderRegistryGetSession
|
mProviderRegistryGetSession = ProviderRegistryGetSession
|
||||||
.createNewSession(context, USER_ID_1, mGetRequestSession, mCredentialProviderInfo,
|
.createNewSession(context, USER_ID_1, mGetRequestSession,
|
||||||
mCallingAppInfo,
|
mCallingAppInfo,
|
||||||
CALLING_PACKAGE_NAME,
|
CALLING_PACKAGE_NAME,
|
||||||
mGetCredentialOption);
|
mGetCredentialOption);
|
||||||
|
|||||||
Reference in New Issue
Block a user