|
@@ -13,10 +13,12 @@ import org.elasticsearch.client.ResponseException;
|
|
|
import org.elasticsearch.common.settings.SecureString;
|
|
|
import org.elasticsearch.common.settings.Settings;
|
|
|
import org.elasticsearch.common.util.concurrent.ThreadContext;
|
|
|
+import org.elasticsearch.core.Nullable;
|
|
|
import org.elasticsearch.test.rest.ESRestTestCase;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.time.Instant;
|
|
|
+import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import static org.hamcrest.Matchers.anEmptyMap;
|
|
@@ -75,24 +77,10 @@ public class ProfileIT extends ESRestTestCase {
|
|
|
}
|
|
|
|
|
|
public void testActivateProfile() throws IOException {
|
|
|
- final Request activateProfileRequest = new Request("POST", "_security/profile/_activate");
|
|
|
- activateProfileRequest.setJsonEntity("""
|
|
|
- {
|
|
|
- "grant_type": "password",
|
|
|
- "username": "rac_user",
|
|
|
- "password": "x-pack-test-password"
|
|
|
- }""");
|
|
|
-
|
|
|
- final Response activateProfileResponse = adminClient().performRequest(activateProfileRequest);
|
|
|
- assertOK(activateProfileResponse);
|
|
|
- final Map<String, Object> activateProfileMap = responseAsMap(activateProfileResponse);
|
|
|
+ final Map<String, Object> activateProfileMap = doActivateProfile();
|
|
|
|
|
|
final String profileUid = (String) activateProfileMap.get("uid");
|
|
|
- final Request getProfileRequest1 = new Request("GET", "_security/profile/" + profileUid);
|
|
|
- final Response getProfileResponse1 = adminClient().performRequest(getProfileRequest1);
|
|
|
- assertOK(getProfileResponse1);
|
|
|
- final Map<String, Object> getProfileMap1 = responseAsMap(getProfileResponse1);
|
|
|
- final Map<String, Object> profile1 = castToMap(getProfileMap1.get(profileUid));
|
|
|
+ final Map<String, Object> profile1 = doGetProfile(profileUid);
|
|
|
assertThat(profile1, equalTo(activateProfileMap));
|
|
|
}
|
|
|
|
|
@@ -110,29 +98,16 @@ public class ProfileIT extends ESRestTestCase {
|
|
|
);
|
|
|
assertOK(adminClient().performRequest(indexRequest));
|
|
|
|
|
|
- final Request getProfileRequest1 = new Request("GET", "_security/profile/" + uid);
|
|
|
- final Response getProfileResponse1 = adminClient().performRequest(getProfileRequest1);
|
|
|
- assertOK(getProfileResponse1);
|
|
|
- final Map<String, Object> getProfileMap1 = responseAsMap(getProfileResponse1);
|
|
|
- assertThat(getProfileMap1.keySet(), contains(uid));
|
|
|
- final Map<String, Object> profile1 = castToMap(getProfileMap1.get(uid));
|
|
|
- assertThat(castToMap(profile1.get("data")), anEmptyMap());
|
|
|
+ final Map<String, Object> profileMap1 = doGetProfile(uid);
|
|
|
+ assertThat(castToMap(profileMap1.get("data")), anEmptyMap());
|
|
|
|
|
|
// Retrieve application data along the profile
|
|
|
- final Request getProfileRequest2 = new Request("GET", "_security/profile/" + uid);
|
|
|
- getProfileRequest2.addParameter("data", "app1");
|
|
|
- final Map<String, Object> getProfileMap2 = responseAsMap(adminClient().performRequest(getProfileRequest2));
|
|
|
- assertThat(getProfileMap2.keySet(), contains(uid));
|
|
|
- final Map<String, Object> profile2 = castToMap(getProfileMap2.get(uid));
|
|
|
- assertThat(castToMap(profile2.get("data")), equalTo(Map.of("app1", Map.of("name", "app1"))));
|
|
|
+ final Map<String, Object> profileMap2 = doGetProfile(uid, "app1");
|
|
|
+ assertThat(castToMap(profileMap2.get("data")), equalTo(Map.of("app1", Map.of("name", "app1"))));
|
|
|
|
|
|
// Retrieve multiple application data
|
|
|
- final Request getProfileRequest3 = new Request("GET", "_security/profile/" + uid);
|
|
|
- getProfileRequest3.addParameter("data", randomFrom("app1,app2", "*", "app*"));
|
|
|
- final Map<String, Object> getProfileMap3 = responseAsMap(adminClient().performRequest(getProfileRequest3));
|
|
|
- assertThat(getProfileMap3.keySet(), contains(uid));
|
|
|
- final Map<String, Object> profile3 = castToMap(getProfileMap3.get(uid));
|
|
|
- assertThat(castToMap(profile3.get("data")), equalTo(Map.of("app1", Map.of("name", "app1"), "app2", Map.of("name", "app2"))));
|
|
|
+ final Map<String, Object> profileMap3 = doGetProfile(uid, randomFrom("app1,app2", "*", "app*"));
|
|
|
+ assertThat(castToMap(profileMap3.get("data")), equalTo(Map.of("app1", Map.of("name", "app1"), "app2", Map.of("name", "app2"))));
|
|
|
|
|
|
// Non-existing profile
|
|
|
final Request getProfileRequest4 = new Request("GET", "_security/profile/not_" + uid);
|
|
@@ -140,6 +115,56 @@ public class ProfileIT extends ESRestTestCase {
|
|
|
assertThat(e4.getResponse().getStatusLine().getStatusCode(), equalTo(404));
|
|
|
}
|
|
|
|
|
|
+ public void testUpdateProfileData() throws IOException {
|
|
|
+ final Map<String, Object> activateProfileMap = doActivateProfile();
|
|
|
+ final String uid = (String) activateProfileMap.get("uid");
|
|
|
+ final Request updateProfileRequest1 = new Request("POST", "_security/profile/_data/" + uid);
|
|
|
+ updateProfileRequest1.setJsonEntity("""
|
|
|
+ {
|
|
|
+ "access": {
|
|
|
+ "app1": { "tags": [ "prod", "east" ] }
|
|
|
+ },
|
|
|
+ "data": {
|
|
|
+ "app1": { "theme": "default" }
|
|
|
+ }
|
|
|
+ }""");
|
|
|
+ assertOK(adminClient().performRequest(updateProfileRequest1));
|
|
|
+
|
|
|
+ final Map<String, Object> profileMap1 = doGetProfile(uid, "app1");
|
|
|
+ assertThat(castToMap(profileMap1.get("access")), equalTo(Map.of("app1", Map.of("tags", List.of("prod", "east")))));
|
|
|
+ assertThat(castToMap(profileMap1.get("data")), equalTo(Map.of("app1", Map.of("theme", "default"))));
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, Object> doActivateProfile() throws IOException {
|
|
|
+ final Request activateProfileRequest = new Request("POST", "_security/profile/_activate");
|
|
|
+ activateProfileRequest.setJsonEntity("""
|
|
|
+ {
|
|
|
+ "grant_type": "password",
|
|
|
+ "username": "rac_user",
|
|
|
+ "password": "x-pack-test-password"
|
|
|
+ }""");
|
|
|
+
|
|
|
+ final Response activateProfileResponse = adminClient().performRequest(activateProfileRequest);
|
|
|
+ assertOK(activateProfileResponse);
|
|
|
+ return responseAsMap(activateProfileResponse);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, Object> doGetProfile(String uid) throws IOException {
|
|
|
+ return doGetProfile(uid, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, Object> doGetProfile(String uid, @Nullable String dataKey) throws IOException {
|
|
|
+ final Request getProfileRequest1 = new Request("GET", "_security/profile/" + uid);
|
|
|
+ if (dataKey != null) {
|
|
|
+ getProfileRequest1.addParameter("data", dataKey);
|
|
|
+ }
|
|
|
+ final Response getProfileResponse1 = adminClient().performRequest(getProfileRequest1);
|
|
|
+ assertOK(getProfileResponse1);
|
|
|
+ final Map<String, Object> getProfileMap1 = responseAsMap(getProfileResponse1);
|
|
|
+ assertThat(getProfileMap1.keySet(), contains(uid));
|
|
|
+ return castToMap(getProfileMap1.get(uid));
|
|
|
+ }
|
|
|
+
|
|
|
@SuppressWarnings("unchecked")
|
|
|
private Map<String, Object> castToMap(Object o) {
|
|
|
return (Map<String, Object>) o;
|