|
11 | 11 |
|
12 | 12 | import org.elasticsearch.entitlement.runtime.policy.entitlements.CreateClassLoaderEntitlement; |
13 | 13 | import org.elasticsearch.entitlement.runtime.policy.entitlements.Entitlement; |
14 | | -import org.elasticsearch.entitlement.runtime.policy.entitlements.FileEntitlement; |
| 14 | +import org.elasticsearch.entitlement.runtime.policy.entitlements.FilesEntitlement; |
15 | 15 | import org.elasticsearch.entitlement.runtime.policy.entitlements.InboundNetworkEntitlement; |
16 | 16 | import org.elasticsearch.entitlement.runtime.policy.entitlements.LoadNativeLibrariesEntitlement; |
17 | 17 | import org.elasticsearch.entitlement.runtime.policy.entitlements.OutboundNetworkEntitlement; |
|
46 | 46 | public class PolicyParser { |
47 | 47 |
|
48 | 48 | private static final Map<String, Class<?>> EXTERNAL_ENTITLEMENTS = Stream.of( |
49 | | - FileEntitlement.class, |
| 49 | + FilesEntitlement.class, |
50 | 50 | CreateClassLoaderEntitlement.class, |
51 | 51 | SetHttpsConnectionPropertiesEntitlement.class, |
52 | 52 | OutboundNetworkEntitlement.class, |
@@ -197,34 +197,41 @@ protected Entitlement parseEntitlement(String scopeName, String entitlementType) |
197 | 197 | ? entitlementConstructor.getParameterTypes() |
198 | 198 | : entitlementMethod.getParameterTypes(); |
199 | 199 | String[] parametersNames = entitlementMetadata.parameterNames(); |
| 200 | + Object[] parameterValues = new Object[parameterTypes.length]; |
200 | 201 |
|
201 | 202 | if (parameterTypes.length != 0 || parametersNames.length != 0) { |
202 | | - if (policyParser.nextToken() != XContentParser.Token.START_OBJECT) { |
203 | | - throw newPolicyParserException(scopeName, entitlementType, "expected entitlement parameters"); |
204 | | - } |
205 | | - } |
206 | | - |
207 | | - Map<String, Object> parsedValues = policyParser.map(); |
| 203 | + if (policyParser.nextToken() == XContentParser.Token.START_OBJECT) { |
| 204 | + Map<String, Object> parsedValues = policyParser.map(); |
208 | 205 |
|
209 | | - Object[] parameterValues = new Object[parameterTypes.length]; |
210 | | - for (int parameterIndex = 0; parameterIndex < parameterTypes.length; ++parameterIndex) { |
211 | | - String parameterName = parametersNames[parameterIndex]; |
212 | | - Object parameterValue = parsedValues.remove(parameterName); |
213 | | - if (parameterValue == null) { |
214 | | - throw newPolicyParserException(scopeName, entitlementType, "missing entitlement parameter [" + parameterName + "]"); |
215 | | - } |
216 | | - Class<?> parameterType = parameterTypes[parameterIndex]; |
217 | | - if (parameterType.isAssignableFrom(parameterValue.getClass()) == false) { |
218 | | - throw newPolicyParserException( |
219 | | - scopeName, |
220 | | - entitlementType, |
221 | | - "unexpected parameter type [" + parameterType.getSimpleName() + "] for entitlement parameter [" + parameterName + "]" |
222 | | - ); |
| 206 | + for (int parameterIndex = 0; parameterIndex < parameterTypes.length; ++parameterIndex) { |
| 207 | + String parameterName = parametersNames[parameterIndex]; |
| 208 | + Object parameterValue = parsedValues.remove(parameterName); |
| 209 | + if (parameterValue == null) { |
| 210 | + throw newPolicyParserException(scopeName, entitlementType, "missing entitlement parameter [" + parameterName + "]"); |
| 211 | + } |
| 212 | + Class<?> parameterType = parameterTypes[parameterIndex]; |
| 213 | + if (parameterType.isAssignableFrom(parameterValue.getClass()) == false) { |
| 214 | + throw newPolicyParserException( |
| 215 | + scopeName, |
| 216 | + entitlementType, |
| 217 | + "unexpected parameter type [" |
| 218 | + + parameterType.getSimpleName() |
| 219 | + + "] for entitlement parameter [" |
| 220 | + + parameterName |
| 221 | + + "]" |
| 222 | + ); |
| 223 | + } |
| 224 | + parameterValues[parameterIndex] = parameterValue; |
| 225 | + } |
| 226 | + if (parsedValues.isEmpty() == false) { |
| 227 | + throw newPolicyParserException(scopeName, entitlementType, "extraneous entitlement parameter(s) " + parsedValues); |
| 228 | + } |
| 229 | + } else if (policyParser.currentToken() == XContentParser.Token.START_ARRAY) { |
| 230 | + List<Object> parsedValues = policyParser.list(); |
| 231 | + parameterValues[0] = parsedValues; |
| 232 | + } else { |
| 233 | + throw newPolicyParserException(scopeName, entitlementType, "expected entitlement parameters"); |
223 | 234 | } |
224 | | - parameterValues[parameterIndex] = parameterValue; |
225 | | - } |
226 | | - if (parsedValues.isEmpty() == false) { |
227 | | - throw newPolicyParserException(scopeName, entitlementType, "extraneous entitlement parameter(s) " + parsedValues); |
228 | 235 | } |
229 | 236 |
|
230 | 237 | try { |
|
0 commit comments