|
@@ -38,6 +38,9 @@ import org.elasticsearch.client.security.DeleteRoleResponse;
|
|
|
import org.elasticsearch.client.security.DisableUserRequest;
|
|
|
import org.elasticsearch.client.security.EmptyResponse;
|
|
|
import org.elasticsearch.client.security.EnableUserRequest;
|
|
|
+import org.elasticsearch.client.security.ExpressionRoleMapping;
|
|
|
+import org.elasticsearch.client.security.GetRoleMappingsRequest;
|
|
|
+import org.elasticsearch.client.security.GetRoleMappingsResponse;
|
|
|
import org.elasticsearch.client.security.GetSslCertificatesResponse;
|
|
|
import org.elasticsearch.client.security.PutRoleMappingRequest;
|
|
|
import org.elasticsearch.client.security.PutRoleMappingResponse;
|
|
@@ -54,14 +57,20 @@ import org.hamcrest.Matchers;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.util.Collections;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.Iterator;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
import java.util.concurrent.CountDownLatch;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
import static org.hamcrest.Matchers.empty;
|
|
|
import static org.hamcrest.Matchers.not;
|
|
|
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
|
|
+import static org.hamcrest.Matchers.contains;
|
|
|
+import static org.hamcrest.Matchers.equalTo;
|
|
|
+import static org.hamcrest.Matchers.is;
|
|
|
+import static org.hamcrest.Matchers.isIn;
|
|
|
|
|
|
public class SecurityDocumentationIT extends ESRestHighLevelClientTestCase {
|
|
|
|
|
@@ -165,6 +174,119 @@ public class SecurityDocumentationIT extends ESRestHighLevelClientTestCase {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void testGetRoleMappings() throws Exception {
|
|
|
+ final RestHighLevelClient client = highLevelClient();
|
|
|
+
|
|
|
+ final RoleMapperExpression rules1 = AnyRoleMapperExpression.builder().addExpression(FieldRoleMapperExpression.ofUsername("*"))
|
|
|
+ .addExpression(FieldRoleMapperExpression.ofGroups("cn=admins,dc=example,dc=com")).build();
|
|
|
+ final PutRoleMappingRequest putRoleMappingRequest1 = new PutRoleMappingRequest("mapping-example-1", true, Collections.singletonList(
|
|
|
+ "superuser"), rules1, null, RefreshPolicy.NONE);
|
|
|
+ final PutRoleMappingResponse putRoleMappingResponse1 = client.security().putRoleMapping(putRoleMappingRequest1,
|
|
|
+ RequestOptions.DEFAULT);
|
|
|
+ boolean isCreated1 = putRoleMappingResponse1.isCreated();
|
|
|
+ assertTrue(isCreated1);
|
|
|
+ final RoleMapperExpression rules2 = AnyRoleMapperExpression.builder().addExpression(FieldRoleMapperExpression.ofGroups(
|
|
|
+ "cn=admins,dc=example,dc=com")).build();
|
|
|
+ final Map<String, Object> metadata2 = new HashMap<>();
|
|
|
+ metadata2.put("k1", "v1");
|
|
|
+ final PutRoleMappingRequest putRoleMappingRequest2 = new PutRoleMappingRequest("mapping-example-2", true, Collections.singletonList(
|
|
|
+ "monitoring"), rules2, metadata2, RefreshPolicy.NONE);
|
|
|
+ final PutRoleMappingResponse putRoleMappingResponse2 = client.security().putRoleMapping(putRoleMappingRequest2,
|
|
|
+ RequestOptions.DEFAULT);
|
|
|
+ boolean isCreated2 = putRoleMappingResponse2.isCreated();
|
|
|
+ assertTrue(isCreated2);
|
|
|
+
|
|
|
+ {
|
|
|
+ // tag::get-role-mappings-execute
|
|
|
+ final GetRoleMappingsRequest request = new GetRoleMappingsRequest("mapping-example-1");
|
|
|
+ final GetRoleMappingsResponse response = client.security().getRoleMappings(request, RequestOptions.DEFAULT);
|
|
|
+ // end::get-role-mappings-execute
|
|
|
+ // tag::get-role-mappings-response
|
|
|
+ List<ExpressionRoleMapping> mappings = response.getMappings();
|
|
|
+ // end::get-role-mappings-response
|
|
|
+ assertNotNull(mappings);
|
|
|
+ assertThat(mappings.size(), is(1));
|
|
|
+ assertThat(mappings.get(0).isEnabled(), is(true));
|
|
|
+ assertThat(mappings.get(0).getName(), is("mapping-example-1"));
|
|
|
+ assertThat(mappings.get(0).getExpression(), equalTo(rules1));
|
|
|
+ assertThat(mappings.get(0).getMetadata(), equalTo(Collections.emptyMap()));
|
|
|
+ assertThat(mappings.get(0).getRoles(), contains("superuser"));
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ // tag::get-role-mappings-list-execute
|
|
|
+ final GetRoleMappingsRequest request = new GetRoleMappingsRequest("mapping-example-1", "mapping-example-2");
|
|
|
+ final GetRoleMappingsResponse response = client.security().getRoleMappings(request, RequestOptions.DEFAULT);
|
|
|
+ // end::get-role-mappings-all-execute
|
|
|
+ List<ExpressionRoleMapping> mappings = response.getMappings();
|
|
|
+ assertNotNull(mappings);
|
|
|
+ assertThat(mappings.size(), is(2));
|
|
|
+ for (ExpressionRoleMapping roleMapping : mappings) {
|
|
|
+ assertThat(roleMapping.isEnabled(), is(true));
|
|
|
+ assertThat(roleMapping.getName(), isIn(new String[] { "mapping-example-1", "mapping-example-2" }));
|
|
|
+ if (roleMapping.getName().equals("mapping-example-1")) {
|
|
|
+ assertThat(roleMapping.getMetadata(), equalTo(Collections.emptyMap()));
|
|
|
+ assertThat(roleMapping.getExpression(), equalTo(rules1));
|
|
|
+ assertThat(roleMapping.getRoles(), contains("superuser"));
|
|
|
+ } else {
|
|
|
+ assertThat(roleMapping.getMetadata(), equalTo(metadata2));
|
|
|
+ assertThat(roleMapping.getExpression(), equalTo(rules2));
|
|
|
+ assertThat(roleMapping.getRoles(), contains("monitoring"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ // tag::get-role-mappings-all-execute
|
|
|
+ final GetRoleMappingsRequest request = new GetRoleMappingsRequest();
|
|
|
+ final GetRoleMappingsResponse response = client.security().getRoleMappings(request, RequestOptions.DEFAULT);
|
|
|
+ // end::get-role-mappings-all-execute
|
|
|
+ List<ExpressionRoleMapping> mappings = response.getMappings();
|
|
|
+ assertNotNull(mappings);
|
|
|
+ assertThat(mappings.size(), is(2));
|
|
|
+ for (ExpressionRoleMapping roleMapping : mappings) {
|
|
|
+ assertThat(roleMapping.isEnabled(), is(true));
|
|
|
+ assertThat(roleMapping.getName(), isIn(new String[] { "mapping-example-1", "mapping-example-2" }));
|
|
|
+ if (roleMapping.getName().equals("mapping-example-1")) {
|
|
|
+ assertThat(roleMapping.getMetadata(), equalTo(Collections.emptyMap()));
|
|
|
+ assertThat(roleMapping.getExpression(), equalTo(rules1));
|
|
|
+ assertThat(roleMapping.getRoles(), contains("superuser"));
|
|
|
+ } else {
|
|
|
+ assertThat(roleMapping.getMetadata(), equalTo(metadata2));
|
|
|
+ assertThat(roleMapping.getExpression(), equalTo(rules2));
|
|
|
+ assertThat(roleMapping.getRoles(), contains("monitoring"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ final GetRoleMappingsRequest request = new GetRoleMappingsRequest();
|
|
|
+ // tag::get-role-mappings-execute-listener
|
|
|
+ ActionListener<GetRoleMappingsResponse> listener = new ActionListener<GetRoleMappingsResponse>() {
|
|
|
+ @Override
|
|
|
+ public void onResponse(GetRoleMappingsResponse response) {
|
|
|
+ // <1>
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onFailure(Exception e) {
|
|
|
+ // <2>
|
|
|
+ }
|
|
|
+ };
|
|
|
+ // end::get-role-mappings-execute-listener
|
|
|
+
|
|
|
+ // Replace the empty listener by a blocking listener in test
|
|
|
+ final CountDownLatch latch = new CountDownLatch(1);
|
|
|
+ listener = new LatchedActionListener<>(listener, latch);
|
|
|
+
|
|
|
+ // tag::get-role-mappings-execute-async
|
|
|
+ client.security().getRoleMappingsAsync(request, RequestOptions.DEFAULT, listener); // <1>
|
|
|
+ // end::get-role-mappings-execute-async
|
|
|
+
|
|
|
+ assertTrue(latch.await(30L, TimeUnit.SECONDS));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public void testEnableUser() throws Exception {
|
|
|
RestHighLevelClient client = highLevelClient();
|
|
|
char[] password = new char[]{'p', 'a', 's', 's', 'w', 'o', 'r', 'd'};
|