File tree 2 files changed +51
-0
lines changed
2 files changed +51
-0
lines changed Original file line number Diff line number Diff line change @@ -187,4 +187,35 @@ private static boolean checkPackageSignature(
187
187
}
188
188
return false ;
189
189
}
190
+
191
+ /**
192
+ * Creates a {@link SecurityPolicy} that allows access if and only if *all* of the specified
193
+ * {@code securityPolicies} allow access.
194
+ *
195
+ * @param securityPolicies the security policies that all must allow access.
196
+ * @throws NullPointerException if any of the inputs are {@code null}.
197
+ * @throws IllegalArgumentException if {@code securityPolicies} is empty.
198
+ */
199
+ public static SecurityPolicy allOf (SecurityPolicy ... securityPolicies ) {
200
+ Preconditions .checkNotNull (securityPolicies , "securityPolicies" );
201
+ Preconditions .checkArgument (securityPolicies .length > 0 , "securityPolicies must not be empty" );
202
+
203
+ return allOfSecurityPolicy (securityPolicies );
204
+ }
205
+
206
+ private static SecurityPolicy allOfSecurityPolicy (SecurityPolicy ... securityPolicies ) {
207
+ return new SecurityPolicy () {
208
+ @ Override
209
+ public Status checkAuthorization (int uid ) {
210
+ for (SecurityPolicy policy : securityPolicies ) {
211
+ Status checkAuth = policy .checkAuthorization (uid );
212
+ if (!checkAuth .isOk ()) {
213
+ return checkAuth ;
214
+ }
215
+ }
216
+
217
+ return Status .OK ;
218
+ }
219
+ };
220
+ }
190
221
}
Original file line number Diff line number Diff line change @@ -171,4 +171,24 @@ public void testHasSignature_failsIfUidUnknown() throws Exception {
171
171
assertThat (policy .checkAuthorization (OTHER_UID_UNKNOWN ).getCode ())
172
172
.isEqualTo (Status .UNAUTHENTICATED .getCode ());
173
173
}
174
+
175
+ @ Test
176
+ public void testAllOf_succeedsIfAllSecurityPoliciesAllowed () throws Exception {
177
+ policy = SecurityPolicies .allOf (SecurityPolicies .internalOnly ());
178
+
179
+ assertThat (policy .checkAuthorization (MY_UID ).getCode ()).isEqualTo (Status .OK .getCode ());
180
+ }
181
+
182
+ @ Test
183
+ public void testAllOf_failsIfOneSecurityPoliciesNotAllowed () throws Exception {
184
+ policy =
185
+ SecurityPolicies .allOf (
186
+ SecurityPolicies .internalOnly (),
187
+ SecurityPolicies .permissionDenied ("Not allowed SecurityPolicy" ));
188
+
189
+ assertThat (policy .checkAuthorization (MY_UID ).getCode ())
190
+ .isEqualTo (Status .PERMISSION_DENIED .getCode ());
191
+ assertThat (policy .checkAuthorization (MY_UID ).getDescription ())
192
+ .contains ("Not allowed SecurityPolicy" );
193
+ }
174
194
}
You can’t perform that action at this time.
0 commit comments