mirror of https://github.com/grpc/grpc-java.git
adding a security policy that allows access if and only if all given security policies allow access. this contributes to b/221149437 and is similar to cl/442582915
This commit is contained in:
parent
4c916c4ed1
commit
fdd9ab4f96
|
|
@ -187,4 +187,35 @@ public final class SecurityPolicies {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link SecurityPolicy} that allows access if and only if *all* of the specified
|
||||
* {@code securityPolicies} allow access.
|
||||
*
|
||||
* @param securityPolicies the security policies that all must allow access.
|
||||
* @throws NullPointerException if any of the inputs are {@code null}.
|
||||
* @throws IllegalArgumentException if {@code securityPolicies} is empty.
|
||||
*/
|
||||
public static SecurityPolicy allOf(SecurityPolicy... securityPolicies) {
|
||||
Preconditions.checkNotNull(securityPolicies, "securityPolicies");
|
||||
Preconditions.checkArgument(securityPolicies.length > 0, "securityPolicies must not be empty");
|
||||
|
||||
return allOfSecurityPolicy(securityPolicies);
|
||||
}
|
||||
|
||||
private static SecurityPolicy allOfSecurityPolicy(SecurityPolicy... securityPolicies) {
|
||||
return new SecurityPolicy() {
|
||||
@Override
|
||||
public Status checkAuthorization(int uid) {
|
||||
for (SecurityPolicy policy : securityPolicies) {
|
||||
Status checkAuth = policy.checkAuthorization(uid);
|
||||
if (!checkAuth.isOk()) {
|
||||
return checkAuth;
|
||||
}
|
||||
}
|
||||
|
||||
return Status.OK;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -171,4 +171,24 @@ public final class SecurityPoliciesTest {
|
|||
assertThat(policy.checkAuthorization(OTHER_UID_UNKNOWN).getCode())
|
||||
.isEqualTo(Status.UNAUTHENTICATED.getCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAllOf_succeedsIfAllSecurityPoliciesAllowed() throws Exception {
|
||||
policy = SecurityPolicies.allOf(SecurityPolicies.internalOnly());
|
||||
|
||||
assertThat(policy.checkAuthorization(MY_UID).getCode()).isEqualTo(Status.OK.getCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAllOf_failsIfOneSecurityPoliciesNotAllowed() throws Exception {
|
||||
policy =
|
||||
SecurityPolicies.allOf(
|
||||
SecurityPolicies.internalOnly(),
|
||||
SecurityPolicies.permissionDenied("Not allowed SecurityPolicy"));
|
||||
|
||||
assertThat(policy.checkAuthorization(MY_UID).getCode())
|
||||
.isEqualTo(Status.PERMISSION_DENIED.getCode());
|
||||
assertThat(policy.checkAuthorization(MY_UID).getDescription())
|
||||
.contains("Not allowed SecurityPolicy");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue