|
@@ -20,7 +20,6 @@ import org.elasticsearch.action.admin.indices.refresh.RefreshResponse;
|
|
|
import org.elasticsearch.action.get.GetAction;
|
|
|
import org.elasticsearch.action.get.GetRequest;
|
|
|
import org.elasticsearch.action.support.PlainActionFuture;
|
|
|
-import org.elasticsearch.action.support.WriteRequest;
|
|
|
import org.elasticsearch.action.update.UpdateResponse;
|
|
|
import org.elasticsearch.client.Request;
|
|
|
import org.elasticsearch.client.RequestOptions;
|
|
@@ -125,6 +124,9 @@ import java.util.stream.Collectors;
|
|
|
import java.util.stream.IntStream;
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
+import static org.elasticsearch.action.support.WriteRequest.RefreshPolicy.IMMEDIATE;
|
|
|
+import static org.elasticsearch.action.support.WriteRequest.RefreshPolicy.NONE;
|
|
|
+import static org.elasticsearch.action.support.WriteRequest.RefreshPolicy.WAIT_UNTIL;
|
|
|
import static org.elasticsearch.test.SecuritySettingsSource.ES_TEST_ROOT_USER;
|
|
|
import static org.elasticsearch.test.SecuritySettingsSource.HASHER;
|
|
|
import static org.elasticsearch.test.SecuritySettingsSource.TEST_ROLE;
|
|
@@ -264,6 +266,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
.setExpiration(TimeValue.timeValueHours(TimeUnit.DAYS.toHours(7L)))
|
|
|
.setRoleDescriptors(Collections.singletonList(descriptor))
|
|
|
.setMetadata(ApiKeyTests.randomMetadata())
|
|
|
+ .setRefreshPolicy(randomFrom(IMMEDIATE, WAIT_UNTIL))
|
|
|
.get();
|
|
|
|
|
|
assertEquals("test key", response.getName());
|
|
@@ -278,7 +281,9 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
assertThat(getApiKeyInfo(client(), response.getId(), randomBoolean(), randomBoolean()).getType(), is(ApiKey.Type.REST));
|
|
|
|
|
|
// create simple api key
|
|
|
- final CreateApiKeyResponse simple = new CreateApiKeyRequestBuilder(client).setName("simple").get();
|
|
|
+ final CreateApiKeyResponse simple = new CreateApiKeyRequestBuilder(client).setName("simple")
|
|
|
+ .setRefreshPolicy(randomFrom(IMMEDIATE, WAIT_UNTIL))
|
|
|
+ .get();
|
|
|
assertEquals("simple", simple.getName());
|
|
|
assertNotNull(simple.getId());
|
|
|
assertNotNull(simple.getKey());
|
|
@@ -320,7 +325,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
.setExpiration(null)
|
|
|
.setRoleDescriptors(Collections.singletonList(descriptor))
|
|
|
.setMetadata(ApiKeyTests.randomMetadata())
|
|
|
- .setRefreshPolicy(WriteRequest.RefreshPolicy.NONE)
|
|
|
+ .setRefreshPolicy(NONE)
|
|
|
.get();
|
|
|
assertNotNull(response.getId());
|
|
|
assertNotNull(response.getKey());
|
|
@@ -338,7 +343,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
);
|
|
|
final ActionRequestValidationException e = expectThrows(
|
|
|
ActionRequestValidationException.class,
|
|
|
- () -> new CreateApiKeyRequestBuilder(client).get()
|
|
|
+ () -> new CreateApiKeyRequestBuilder(client).setRefreshPolicy(randomFrom(NONE, WAIT_UNTIL, IMMEDIATE)).get()
|
|
|
);
|
|
|
assertThat(e.getMessage(), containsString("api key name is required"));
|
|
|
}
|
|
@@ -643,7 +648,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
assertFalse(created.isBefore(withinRetention));
|
|
|
UpdateResponse expirationDateUpdatedResponse = client.prepareUpdate(SECURITY_MAIN_ALIAS, createdApiKeys.get(0).getId())
|
|
|
.setDoc("expiration_time", withinRetention.toEpochMilli())
|
|
|
- .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
|
|
|
+ .setRefreshPolicy(IMMEDIATE)
|
|
|
.get();
|
|
|
assertThat(expirationDateUpdatedResponse.getResult(), is(DocWriteResponse.Result.UPDATED));
|
|
|
|
|
@@ -653,21 +658,21 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
assertTrue(Instant.now().isAfter(outsideRetention));
|
|
|
expirationDateUpdatedResponse = client.prepareUpdate(SECURITY_MAIN_ALIAS, createdApiKeys.get(1).getId())
|
|
|
.setDoc("expiration_time", outsideRetention.toEpochMilli())
|
|
|
- .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
|
|
|
+ .setRefreshPolicy(IMMEDIATE)
|
|
|
.get();
|
|
|
assertThat(expirationDateUpdatedResponse.getResult(), is(DocWriteResponse.Result.UPDATED));
|
|
|
|
|
|
// Invalidate the 3rd key such that it cannot be deleted by the remover
|
|
|
UpdateResponse invalidateUpdateResponse = client.prepareUpdate(SECURITY_MAIN_ALIAS, createdApiKeys.get(2).getId())
|
|
|
.setDoc("invalidation_time", withinRetention.toEpochMilli(), "api_key_invalidated", true)
|
|
|
- .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
|
|
|
+ .setRefreshPolicy(IMMEDIATE)
|
|
|
.get();
|
|
|
assertThat(invalidateUpdateResponse.getResult(), is(DocWriteResponse.Result.UPDATED));
|
|
|
|
|
|
// Invalidate the 4th key such that it will be deleted by the remover
|
|
|
invalidateUpdateResponse = client.prepareUpdate(SECURITY_MAIN_ALIAS, createdApiKeys.get(3).getId())
|
|
|
.setDoc("invalidation_time", outsideRetention.toEpochMilli(), "api_key_invalidated", true)
|
|
|
- .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
|
|
|
+ .setRefreshPolicy(IMMEDIATE)
|
|
|
.get();
|
|
|
assertThat(invalidateUpdateResponse.getResult(), is(DocWriteResponse.Result.UPDATED));
|
|
|
|
|
@@ -681,7 +686,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
"api_key_invalidated",
|
|
|
true
|
|
|
)
|
|
|
- .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
|
|
|
+ .setRefreshPolicy(IMMEDIATE)
|
|
|
.get();
|
|
|
assertThat(updateResponse.getResult(), is(DocWriteResponse.Result.UPDATED));
|
|
|
|
|
@@ -695,7 +700,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
"api_key_invalidated",
|
|
|
true
|
|
|
)
|
|
|
- .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
|
|
|
+ .setRefreshPolicy(IMMEDIATE)
|
|
|
.get();
|
|
|
assertThat(updateResponse.getResult(), is(DocWriteResponse.Result.UPDATED));
|
|
|
|
|
@@ -703,7 +708,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
// It does not matter whether it has an expiration time or whether the expiration time is still within retention period
|
|
|
updateResponse = client.prepareUpdate(SECURITY_MAIN_ALIAS, createdApiKeys.get(6).getId())
|
|
|
.setDoc("api_key_invalidated", true, "expiration_time", randomBoolean() ? withinRetention.toEpochMilli() : null)
|
|
|
- .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
|
|
|
+ .setRefreshPolicy(IMMEDIATE)
|
|
|
.get();
|
|
|
assertThat(updateResponse.getResult(), is(DocWriteResponse.Result.UPDATED));
|
|
|
|
|
@@ -1599,6 +1604,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
Collections.singletonList(new RoleDescriptor("role", new String[] { "manage_api_key", "manage_token" }, null, null))
|
|
|
)
|
|
|
.setMetadata(ApiKeyTests.randomMetadata())
|
|
|
+ .setRefreshPolicy(randomFrom(IMMEDIATE, WAIT_UNTIL, NONE))
|
|
|
.get();
|
|
|
|
|
|
assertEquals("key-1", response.getName());
|
|
@@ -1624,13 +1630,19 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
|
|
|
final IllegalArgumentException e1 = expectThrows(
|
|
|
IllegalArgumentException.class,
|
|
|
- () -> new CreateApiKeyRequestBuilder(clientKey1).setName("key-2").setMetadata(ApiKeyTests.randomMetadata()).get()
|
|
|
+ () -> new CreateApiKeyRequestBuilder(clientKey1).setName("key-2")
|
|
|
+ .setMetadata(ApiKeyTests.randomMetadata())
|
|
|
+ .setRefreshPolicy(randomFrom(IMMEDIATE, WAIT_UNTIL, NONE))
|
|
|
+ .get()
|
|
|
);
|
|
|
assertThat(e1.getMessage(), containsString(expectedMessage));
|
|
|
|
|
|
final IllegalArgumentException e2 = expectThrows(
|
|
|
IllegalArgumentException.class,
|
|
|
- () -> new CreateApiKeyRequestBuilder(clientKey1).setName("key-3").setRoleDescriptors(Collections.emptyList()).get()
|
|
|
+ () -> new CreateApiKeyRequestBuilder(clientKey1).setName("key-3")
|
|
|
+ .setRoleDescriptors(Collections.emptyList())
|
|
|
+ .setRefreshPolicy(randomFrom(IMMEDIATE, WAIT_UNTIL, NONE))
|
|
|
+ .get()
|
|
|
);
|
|
|
assertThat(e2.getMessage(), containsString(expectedMessage));
|
|
|
|
|
@@ -1641,6 +1653,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
.setRoleDescriptors(
|
|
|
Collections.singletonList(new RoleDescriptor("role", new String[] { "manage_own_api_key" }, null, null))
|
|
|
)
|
|
|
+ .setRefreshPolicy(randomFrom(IMMEDIATE, WAIT_UNTIL, NONE))
|
|
|
.get()
|
|
|
);
|
|
|
assertThat(e3.getMessage(), containsString(expectedMessage));
|
|
@@ -1656,6 +1669,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
() -> new CreateApiKeyRequestBuilder(clientKey1).setName("key-5")
|
|
|
.setMetadata(ApiKeyTests.randomMetadata())
|
|
|
.setRoleDescriptors(roleDescriptors)
|
|
|
+ .setRefreshPolicy(randomFrom(IMMEDIATE, WAIT_UNTIL, NONE))
|
|
|
.get()
|
|
|
);
|
|
|
assertThat(e4.getMessage(), containsString(expectedMessage));
|
|
@@ -1663,6 +1677,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
final CreateApiKeyResponse key100Response = new CreateApiKeyRequestBuilder(clientKey1).setName("key-100")
|
|
|
.setMetadata(ApiKeyTests.randomMetadata())
|
|
|
.setRoleDescriptors(Collections.singletonList(new RoleDescriptor("role", null, null, null)))
|
|
|
+ .setRefreshPolicy(randomFrom(IMMEDIATE, WAIT_UNTIL))
|
|
|
.get();
|
|
|
assertEquals("key-100", key100Response.getName());
|
|
|
assertNotNull(key100Response.getId());
|
|
@@ -1696,6 +1711,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
final CreateApiKeyResponse response1 = new CreateApiKeyRequestBuilder(client).setName("run-as-key")
|
|
|
.setRoleDescriptors(List.of(descriptor))
|
|
|
.setMetadata(ApiKeyTests.randomMetadata())
|
|
|
+ .setRefreshPolicy(randomFrom(IMMEDIATE, WAIT_UNTIL))
|
|
|
.get();
|
|
|
|
|
|
final String base64ApiKeyKeyValue = Base64.getEncoder()
|
|
@@ -1705,7 +1721,10 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
client().filterWithHeader(
|
|
|
Map.of("Authorization", "ApiKey " + base64ApiKeyKeyValue, "es-security-runas-user", ES_TEST_ROOT_USER)
|
|
|
)
|
|
|
- ).setName("create-by run-as user").setRoleDescriptors(List.of(new RoleDescriptor("a", new String[] { "all" }, null, null))).get();
|
|
|
+ ).setName("create-by run-as user")
|
|
|
+ .setRoleDescriptors(List.of(new RoleDescriptor("a", new String[] { "all" }, null, null)))
|
|
|
+ .setRefreshPolicy(randomFrom(IMMEDIATE, WAIT_UNTIL))
|
|
|
+ .get();
|
|
|
|
|
|
final GetApiKeyResponse getApiKeyResponse = client.execute(
|
|
|
GetApiKeyAction.INSTANCE,
|
|
@@ -1732,6 +1751,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
final CreateApiKeyResponse createApiKeyResponse = new CreateApiKeyRequestBuilder(client).setName("auth only key")
|
|
|
.setRoleDescriptors(Collections.singletonList(descriptor))
|
|
|
.setMetadata(ApiKeyTests.randomMetadata())
|
|
|
+ .setRefreshPolicy(randomFrom(IMMEDIATE, WAIT_UNTIL, NONE))
|
|
|
.get();
|
|
|
|
|
|
assertNotNull(createApiKeyResponse.getId());
|
|
@@ -2344,7 +2364,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
assertTrue(Instant.now().isAfter(dayBefore));
|
|
|
final var expirationDateUpdatedResponse = client().prepareUpdate(SECURITY_MAIN_ALIAS, apiKeyId)
|
|
|
.setDoc("expiration_time", dayBefore.toEpochMilli())
|
|
|
- .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
|
|
|
+ .setRefreshPolicy(IMMEDIATE)
|
|
|
.get();
|
|
|
assertThat(expirationDateUpdatedResponse.getResult(), is(DocWriteResponse.Result.UPDATED));
|
|
|
}
|
|
@@ -2846,6 +2866,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
|
|
|
final CreateApiKeyResponse createApiKeyResponse = new CreateApiKeyRequestBuilder(client).setName("test key")
|
|
|
.setMetadata(ApiKeyTests.randomMetadata())
|
|
|
+ .setRefreshPolicy(randomFrom(IMMEDIATE, WAIT_UNTIL))
|
|
|
.get();
|
|
|
final String docId = createApiKeyResponse.getId();
|
|
|
authenticateWithApiKey(docId, createApiKeyResponse.getKey());
|
|
@@ -3087,7 +3108,7 @@ public class ApiKeyIntegTests extends SecurityIntegTestCase {
|
|
|
.setExpiration(expiration)
|
|
|
.setRoleDescriptors(Collections.singletonList(descriptor))
|
|
|
.setMetadata(metadata)
|
|
|
- .setRefreshPolicy(i == noOfApiKeys - 1 ? WriteRequest.RefreshPolicy.IMMEDIATE : WriteRequest.RefreshPolicy.NONE)
|
|
|
+ .setRefreshPolicy(i == noOfApiKeys - 1 ? randomFrom(IMMEDIATE, WAIT_UNTIL) : NONE)
|
|
|
.get();
|
|
|
assertNotNull(response.getId());
|
|
|
assertNotNull(response.getKey());
|