|
|
@@ -48,6 +48,8 @@ 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.GetPrivilegesRequest;
|
|
|
+import org.elasticsearch.client.security.GetPrivilegesResponse;
|
|
|
import org.elasticsearch.client.security.GetRoleMappingsRequest;
|
|
|
import org.elasticsearch.client.security.GetRoleMappingsResponse;
|
|
|
import org.elasticsearch.client.security.GetSslCertificatesResponse;
|
|
|
@@ -65,6 +67,7 @@ import org.elasticsearch.client.security.support.expressiondsl.RoleMapperExpress
|
|
|
import org.elasticsearch.client.security.support.expressiondsl.expressions.AnyRoleMapperExpression;
|
|
|
import org.elasticsearch.client.security.support.expressiondsl.fields.FieldRoleMapperExpression;
|
|
|
import org.elasticsearch.client.security.user.User;
|
|
|
+import org.elasticsearch.client.security.user.privileges.ApplicationPrivilege;
|
|
|
import org.elasticsearch.client.security.user.privileges.IndicesPrivileges;
|
|
|
import org.elasticsearch.common.Strings;
|
|
|
import org.elasticsearch.common.util.set.Sets;
|
|
|
@@ -73,16 +76,19 @@ import org.elasticsearch.rest.RestStatus;
|
|
|
import org.hamcrest.Matchers;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Collections;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Iterator;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
import java.util.concurrent.CountDownLatch;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
|
|
import static org.hamcrest.Matchers.contains;
|
|
|
+import static org.hamcrest.Matchers.containsInAnyOrder;
|
|
|
import static org.hamcrest.Matchers.empty;
|
|
|
import static org.hamcrest.Matchers.emptyIterable;
|
|
|
import static org.hamcrest.Matchers.equalTo;
|
|
|
@@ -475,7 +481,7 @@ public class SecurityDocumentationIT extends ESRestHighLevelClientTestCase {
|
|
|
}
|
|
|
|
|
|
{
|
|
|
- HasPrivilegesRequest request = new HasPrivilegesRequest(Collections.singleton("monitor"),null,null);
|
|
|
+ HasPrivilegesRequest request = new HasPrivilegesRequest(Collections.singleton("monitor"), null, null);
|
|
|
|
|
|
// tag::has-privileges-execute-listener
|
|
|
ActionListener<HasPrivilegesResponse> listener = new ActionListener<HasPrivilegesResponse>() {
|
|
|
@@ -987,6 +993,146 @@ public class SecurityDocumentationIT extends ESRestHighLevelClientTestCase {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public void testGetPrivileges() throws Exception {
|
|
|
+ final RestHighLevelClient client = highLevelClient();
|
|
|
+ final ApplicationPrivilege readTestappPrivilege =
|
|
|
+ new ApplicationPrivilege("testapp", "read", Arrays.asList("action:login", "data:read/*"), null);
|
|
|
+ final Map<String, Object> metadata = new HashMap<>();
|
|
|
+ metadata.put("key1", "value1");
|
|
|
+ final ApplicationPrivilege writeTestappPrivilege =
|
|
|
+ new ApplicationPrivilege("testapp", "write", Arrays.asList("action:login", "data:write/*"), metadata);
|
|
|
+ final ApplicationPrivilege allTestappPrivilege =
|
|
|
+ new ApplicationPrivilege("testapp", "all", Arrays.asList("action:login", "data:write/*", "manage:*"), null);
|
|
|
+ final Map<String, Object> metadata2 = new HashMap<>();
|
|
|
+ metadata2.put("key2", "value2");
|
|
|
+ final ApplicationPrivilege readTestapp2Privilege =
|
|
|
+ new ApplicationPrivilege("testapp2", "read", Arrays.asList("action:login", "data:read/*"), metadata2);
|
|
|
+ final ApplicationPrivilege writeTestapp2Privilege =
|
|
|
+ new ApplicationPrivilege("testapp2", "write", Arrays.asList("action:login", "data:write/*"), null);
|
|
|
+ final ApplicationPrivilege allTestapp2Privilege =
|
|
|
+ new ApplicationPrivilege("testapp2", "all", Arrays.asList("action:login", "data:write/*", "manage:*"), null);
|
|
|
+
|
|
|
+ {
|
|
|
+ //TODO Replace this with a call to PutPrivileges once it is implemented
|
|
|
+ final Request createPrivilegeRequest = new Request("POST", "/_xpack/security/privilege");
|
|
|
+ createPrivilegeRequest.setJsonEntity("{" +
|
|
|
+ " \"testapp\": {" +
|
|
|
+ " \"read\": {" +
|
|
|
+ " \"actions\": [ \"action:login\", \"data:read/*\" ]" +
|
|
|
+ " }," +
|
|
|
+ " \"write\": {" +
|
|
|
+ " \"actions\": [ \"action:login\", \"data:write/*\" ]," +
|
|
|
+ " \"metadata\": { \"key1\": \"value1\" }" +
|
|
|
+ " }," +
|
|
|
+ " \"all\": {" +
|
|
|
+ " \"actions\": [ \"action:login\", \"data:write/*\" , \"manage:*\"]" +
|
|
|
+ " }" +
|
|
|
+ " }," +
|
|
|
+ " \"testapp2\": {" +
|
|
|
+ " \"read\": {" +
|
|
|
+ " \"actions\": [ \"action:login\", \"data:read/*\" ]," +
|
|
|
+ " \"metadata\": { \"key2\": \"value2\" }" +
|
|
|
+ " }," +
|
|
|
+ " \"write\": {" +
|
|
|
+ " \"actions\": [ \"action:login\", \"data:write/*\" ]" +
|
|
|
+ " }," +
|
|
|
+ " \"all\": {" +
|
|
|
+ " \"actions\": [ \"action:login\", \"data:write/*\" , \"manage:*\"]" +
|
|
|
+ " }" +
|
|
|
+ " }" +
|
|
|
+ "}");
|
|
|
+ final Response createPrivilegeResponse = client.getLowLevelClient().performRequest(createPrivilegeRequest);
|
|
|
+ assertEquals(RestStatus.OK.getStatus(), createPrivilegeResponse.getStatusLine().getStatusCode());
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ //tag::get-privileges-request
|
|
|
+ GetPrivilegesRequest request = new GetPrivilegesRequest("testapp", "write");
|
|
|
+ //end::get-privileges-request
|
|
|
+ //tag::get-privileges-execute
|
|
|
+ GetPrivilegesResponse response = client.security().getPrivileges(request, RequestOptions.DEFAULT);
|
|
|
+ //end::get-privileges-execute
|
|
|
+ assertNotNull(response);
|
|
|
+ assertThat(response.getPrivileges().size(), equalTo(1));
|
|
|
+ assertThat(response.getPrivileges().contains(writeTestappPrivilege), equalTo(true));
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ //tag::get-all-application-privileges-request
|
|
|
+ GetPrivilegesRequest request = GetPrivilegesRequest.getApplicationPrivileges("testapp");
|
|
|
+ //end::get-all-application-privileges-request
|
|
|
+ GetPrivilegesResponse response = client.security().getPrivileges(request, RequestOptions.DEFAULT);
|
|
|
+
|
|
|
+ assertNotNull(response);
|
|
|
+ assertThat(response.getPrivileges().size(), equalTo(3));
|
|
|
+ final GetPrivilegesResponse exptectedResponse =
|
|
|
+ new GetPrivilegesResponse(Arrays.asList(readTestappPrivilege, writeTestappPrivilege, allTestappPrivilege));
|
|
|
+ assertThat(response, equalTo(exptectedResponse));
|
|
|
+ Set<ApplicationPrivilege> privileges = response.getPrivileges();
|
|
|
+ for (ApplicationPrivilege privilege : privileges) {
|
|
|
+ assertThat(privilege.getApplication(), equalTo("testapp"));
|
|
|
+ if (privilege.getName().equals("read")) {
|
|
|
+ assertThat(privilege.getActions(), containsInAnyOrder("action:login", "data:read/*"));
|
|
|
+ assertThat(privilege.getMetadata().isEmpty(), equalTo(true));
|
|
|
+ } else if (privilege.getName().equals("write")) {
|
|
|
+ assertThat(privilege.getActions(), containsInAnyOrder("action:login", "data:write/*"));
|
|
|
+ assertThat(privilege.getMetadata().isEmpty(), equalTo(false));
|
|
|
+ assertThat(privilege.getMetadata().get("key1"), equalTo("value1"));
|
|
|
+ } else if (privilege.getName().equals("all")) {
|
|
|
+ assertThat(privilege.getActions(), containsInAnyOrder("action:login", "data:write/*", "manage:*"));
|
|
|
+ assertThat(privilege.getMetadata().isEmpty(), equalTo(true));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ //tag::get-all-privileges-request
|
|
|
+ GetPrivilegesRequest request = GetPrivilegesRequest.getAllPrivileges();
|
|
|
+ //end::get-all-privileges-request
|
|
|
+ GetPrivilegesResponse response = client.security().getPrivileges(request, RequestOptions.DEFAULT);
|
|
|
+
|
|
|
+ assertNotNull(response);
|
|
|
+ assertThat(response.getPrivileges().size(), equalTo(6));
|
|
|
+ final GetPrivilegesResponse exptectedResponse =
|
|
|
+ new GetPrivilegesResponse(Arrays.asList(readTestappPrivilege, writeTestappPrivilege, allTestappPrivilege,
|
|
|
+ readTestapp2Privilege, writeTestapp2Privilege, allTestapp2Privilege));
|
|
|
+ assertThat(response, equalTo(exptectedResponse));
|
|
|
+ }
|
|
|
+
|
|
|
+ {
|
|
|
+ GetPrivilegesRequest request = new GetPrivilegesRequest("testapp", "read");
|
|
|
+ //tag::get-privileges-execute-listener
|
|
|
+ ActionListener<GetPrivilegesResponse> listener = new ActionListener<GetPrivilegesResponse>() {
|
|
|
+ @Override
|
|
|
+ public void onResponse(GetPrivilegesResponse getPrivilegesResponse) {
|
|
|
+ // <1>
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void onFailure(Exception e) {
|
|
|
+ // <2>
|
|
|
+ }
|
|
|
+ };
|
|
|
+ //end::get-privileges-execute-listener
|
|
|
+
|
|
|
+ // Avoid unused variable warning
|
|
|
+ assertNotNull(listener);
|
|
|
+
|
|
|
+ // Replace the empty listener by a blocking listener in test
|
|
|
+ final PlainActionFuture<GetPrivilegesResponse> future = new PlainActionFuture<>();
|
|
|
+ listener = future;
|
|
|
+
|
|
|
+ //tag::get-privileges-execute-async
|
|
|
+ client.security().getPrivilegesAsync(request, RequestOptions.DEFAULT, listener); // <1>
|
|
|
+ //end::get-privileges-execute-async
|
|
|
+
|
|
|
+ final GetPrivilegesResponse response = future.get(30, TimeUnit.SECONDS);
|
|
|
+ assertNotNull(response);
|
|
|
+ assertThat(response.getPrivileges().size(), equalTo(1));
|
|
|
+ assertThat(response.getPrivileges().contains(readTestappPrivilege), equalTo(true));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public void testDeletePrivilege() throws Exception {
|
|
|
RestHighLevelClient client = highLevelClient();
|
|
|
{
|
|
|
@@ -1061,3 +1207,4 @@ public class SecurityDocumentationIT extends ESRestHighLevelClientTestCase {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|