}
<<<<<<< HEAD
=======
@Test
public void testSuccessfulUserManagementInZone() throws Exception {
String subdomain = generator.generate();
createOtherIdentityZone(subdomain);
String zoneAdminToken = testClient.getClientCredentialsOAuthAccessToken("admin", "admin-secret", "scim.write,scim.read", subdomain);
ScimUser user = createUser(zoneAdminToken, subdomain);
user.setUserName("updated-username@test.com");
MockHttpServletRequestBuilder put = put("/Users/" + user.getId())
.header("Authorization", "Bearer " + zoneAdminToken)
.header("If-Match", "\"" + user.getVersion() + "\"")
.contentType(APPLICATION_JSON)
.content(new ObjectMapper().writeValueAsString(user))
.with(new SetServerNameRequestPostProcessor(subdomain + ".localhost"));
MvcResult result = mockMvc.perform(put)
.andExpect(status().isOk())
.andExpect(jsonPath("$.userName").value(user.getUserName()))
.andReturn();
user = new ObjectMapper().readValue(result.getResponse().getContentAsString(), ScimUser.class);
List users = getUsersInZone(subdomain, zoneAdminToken);
assertTrue(users.contains(user));
assertEquals(1, users.size());
MockHttpServletRequestBuilder delete = delete("/Users/" + user.getId())
.header("Authorization", "Bearer " + zoneAdminToken)
.header("If-Match", "\"" + user.getVersion() + "\"")
.contentType(APPLICATION_JSON)
.with(new SetServerNameRequestPostProcessor(subdomain + ".localhost"));
mockMvc.perform(delete)
.andExpect(status().isOk())
.andExpect(jsonPath("$.id").value(user.getId()))
.andReturn();
users = getUsersInZone(subdomain, zoneAdminToken);
assertEquals(0, users.size());
}
private List getUsersInZone(String subdomain, String token) throws Exception {
MockHttpServletRequestBuilder get = get("/Users").header("Authorization", "Bearer " + token);
if (subdomain != null && !subdomain.equals("")) get.with(new SetServerNameRequestPostProcessor(subdomain + ".localhost"));
MvcResult mvcResult = mockMvc.perform(get).andExpect(status().isOk()).andReturn();
JsonNode root = new ObjectMapper().readTree(mvcResult.getResponse().getContentAsString());
return new ObjectMapper().readValue(root.get("resources").toString(), new TypeReference>() {});
}
@Test
public void testCreateAndListUsersInOtherZoneIsUnauthorized() throws Exception {
String subdomain = generator.generate();
createOtherIdentityZone(subdomain);
String zoneAdminToken = testClient.getClientCredentialsOAuthAccessToken("admin", "adminsecret", "scim.write,scim.read", null);
ScimUser user = getScimUser();
byte[] requestBody = new ObjectMapper().writeValueAsBytes(user);
MockHttpServletRequestBuilder post = post("/Users")
.with(new SetServerNameRequestPostProcessor(subdomain + ".localhost"))
.header("Authorization", "Bearer " + zoneAdminToken)
.contentType(APPLICATION_JSON)
.content(requestBody);
mockMvc.perform(post).andExpect(status().isUnauthorized());
MockHttpServletRequestBuilder get = get("/Users").header("Authorization", "Bearer " + zoneAdminToken);
if (subdomain != null && !subdomain.equals("")) get.with(new SetServerNameRequestPostProcessor(subdomain + ".localhost"));
mockMvc.perform(get).andExpect(status().isUnauthorized()).andReturn();
}
@Test
public void testModifyandDeleteUserInOtherZoneIsUnauthorized() throws Exception {
String defaultZoneAdminToken = testClient.getClientCredentialsOAuthAccessToken("admin", "adminsecret", "scim.write", null);
ScimUser user = createUser(defaultZoneAdminToken, null);
String subdomain = generator.generate();
createOtherIdentityZone(subdomain);
String zoneAdminToken = testClient.getClientCredentialsOAuthAccessToken("admin", "admin-secret", "scim.write,scim.read", subdomain);
user.setUserName("updated-user@defaultzone.com");
MockHttpServletRequestBuilder put = put("/Users/" + user.getId())
.header("Authorization", "Bearer " + zoneAdminToken)
.header("If-Match", "\"" + user.getVersion() + "\"")
.contentType(APPLICATION_JSON)
.content(new ObjectMapper().writeValueAsString(user));
mockMvc.perform(put)
.andExpect(status().isUnauthorized())
.andReturn();
MockHttpServletRequestBuilder delete = delete("/Users/" + user.getId())
.header("Authorization", "Bearer " + zoneAdminToken)
.header("If-Match", "\"" + user.getVersion() + "\"")
.contentType(APPLICATION_JSON);
mockMvc.perform(delete)
.andExpect(status().isUnauthorized())
.andReturn();
}
private IdentityZone createOtherIdentityZone(String subdomain) throws Exception {
String identityToken = testClient.getClientCredentialsOAuthAccessToken("identity", "identitysecret", "zones.create", null);
IdentityZone identityZone = MultitenancyFixture.identityZone(subdomain, subdomain);
IdentityZoneCreationRequest creationRequest = new IdentityZoneCreationRequest();
creationRequest.setIdentityZone(identityZone);
List clientDetails = new ArrayList<>();
BaseClientDetails client = new BaseClientDetails("admin", null,null, "client_credentials", "clients.admin,scim.read,scim.write");
client.setClientSecret("admin-secret");
clientDetails.add(client);
creationRequest.setClientDetails(clientDetails);
mockMvc.perform(post("/identity-zones")
.header("Authorization", "Bearer " + identityToken)
.contentType(APPLICATION_JSON)
.accept(APPLICATION_JSON)
.content(new ObjectMapper().writeValueAsString(creationRequest)))
.andExpect(status().isCreated());
return identityZone;
}
>>>>>>> ceb434fe6a8cb9874bb89ac83b68000e864cba8e
private String getBasicAuthHeaderValue(String clientId, String clientSecret) {
final String plainCreds = clientId+":"+clientSecret;
final byte[] plainCredsBytes = plainCreds.getBytes(); |