use of org.keycloak.representations.account.UserRepresentation in project keycloak by keycloak.
the class AccountRestServiceTest method testGetUserProfileWithoutMetadata.
@Test
public void testGetUserProfileWithoutMetadata() throws IOException {
UserRepresentation user = getUser(false);
assertNull(user.getUserProfileMetadata());
}
use of org.keycloak.representations.account.UserRepresentation in project keycloak by keycloak.
the class AccountRestServiceTest method testGetUserProfileMetadata_EditUsernameAllowed.
@Test
public void testGetUserProfileMetadata_EditUsernameAllowed() throws IOException {
UserRepresentation user = getUser();
assertNotNull(user.getUserProfileMetadata());
assertUserProfileAttributeMetadata(user, "username", "${username}", true, false);
assertUserProfileAttributeMetadata(user, "email", "${email}", true, false);
assertUserProfileAttributeMetadata(user, "firstName", "${firstName}", true, false);
assertUserProfileAttributeMetadata(user, "lastName", "${lastName}", true, false);
}
use of org.keycloak.representations.account.UserRepresentation in project keycloak by keycloak.
the class AccountRestServiceTest method testUpdateProfile.
@Test
public void testUpdateProfile() throws IOException {
UserRepresentation user = getUser();
String originalUsername = user.getUsername();
String originalFirstName = user.getFirstName();
String originalLastName = user.getLastName();
String originalEmail = user.getEmail();
Map<String, List<String>> originalAttributes = new HashMap<>(user.getAttributes());
try {
RealmRepresentation realmRep = adminClient.realm("test").toRepresentation();
realmRep.setRegistrationEmailAsUsername(false);
adminClient.realm("test").update(realmRep);
user.setFirstName("Homer");
user.setLastName("Simpsons");
user.getAttributes().put("attr1", Collections.singletonList("val1"));
user.getAttributes().put("attr2", Collections.singletonList("val2"));
user = updateAndGet(user);
assertEquals("Homer", user.getFirstName());
assertEquals("Simpsons", user.getLastName());
assertEquals(2, user.getAttributes().size());
assertEquals(1, user.getAttributes().get("attr1").size());
assertEquals("val1", user.getAttributes().get("attr1").get(0));
assertEquals(1, user.getAttributes().get("attr2").size());
assertEquals("val2", user.getAttributes().get("attr2").get(0));
// Update attributes
user.getAttributes().remove("attr1");
user.getAttributes().get("attr2").add("val3");
user = updateAndGet(user);
if (isDeclarativeUserProfile()) {
assertEquals(2, user.getAttributes().size());
assertTrue(user.getAttributes().get("attr1").isEmpty());
} else {
assertEquals(1, user.getAttributes().size());
}
assertEquals(2, user.getAttributes().get("attr2").size());
assertThat(user.getAttributes().get("attr2"), containsInAnyOrder("val2", "val3"));
// Update email
user.setEmail("bobby@localhost");
user = updateAndGet(user);
assertEquals("bobby@localhost", user.getEmail());
user.setEmail("john-doh@localhost");
updateError(user, 409, Messages.EMAIL_EXISTS);
user.setEmail("test-user@localhost");
user = updateAndGet(user);
assertEquals("test-user@localhost", user.getEmail());
user.setUsername("john-doh@localhost");
updateError(user, 409, Messages.USERNAME_EXISTS);
user.setUsername("test-user@localhost");
user = updateAndGet(user);
assertEquals("test-user@localhost", user.getUsername());
realmRep.setRegistrationEmailAsUsername(true);
adminClient.realm("test").update(realmRep);
user.setUsername("updatedUsername");
user = updateAndGet(user);
assertEquals("test-user@localhost", user.getUsername());
realmRep.setRegistrationEmailAsUsername(false);
adminClient.realm("test").update(realmRep);
user.setUsername("updatedUsername");
user = updateAndGet(user);
assertEquals("updatedusername", user.getUsername());
realmRep.setEditUsernameAllowed(false);
realmRep.setRegistrationEmailAsUsername(false);
adminClient.realm("test").update(realmRep);
user.setUsername("updatedUsername2");
updateError(user, 400, Messages.READ_ONLY_USERNAME);
} finally {
RealmRepresentation realmRep = adminClient.realm("test").toRepresentation();
realmRep.setEditUsernameAllowed(true);
adminClient.realm("test").update(realmRep);
user.setUsername(originalUsername);
user.setFirstName(originalFirstName);
user.setLastName(originalLastName);
user.setEmail(originalEmail);
user.setAttributes(originalAttributes);
SimpleHttp.Response response = SimpleHttp.doPost(getAccountUrl(null), httpClient).auth(tokenUtil.getToken()).json(user).asResponse();
System.out.println(response.asString());
assertEquals(204, response.getStatus());
}
}
use of org.keycloak.representations.account.UserRepresentation in project keycloak by keycloak.
the class AccountRestServiceReadOnlyAttributesTest method testAccountUpdateAttributeExpectSuccess.
private void testAccountUpdateAttributeExpectSuccess(String attrName) throws IOException {
// Attribute not yet supposed to be on the user
UserRepresentation user = SimpleHttp.doGet(getAccountUrl(null), httpClient).auth(tokenUtil.getToken()).asJson(UserRepresentation.class);
Assert.assertThat(user.getAttributes().keySet(), not(contains(attrName)));
// Assert not possible to add the attribute to the user
user.singleAttribute(attrName, "foo");
user = updateAndGet(user);
// Update attribute of the user with account REST to the same value (Case when we are updating existing attribute) - should be fine as our attribute is not changed
user = SimpleHttp.doGet(getAccountUrl(null), httpClient).auth(tokenUtil.getToken()).asJson(UserRepresentation.class);
Assert.assertEquals("foo", user.getAttributes().get(attrName).get(0));
user.singleAttribute("someOtherAttr", "foo");
user = updateAndGet(user);
// Update attribute of the user with account REST (Case when we are updating existing attribute
user.singleAttribute(attrName, "foo-updated");
user = updateAndGet(user);
// Remove attribute from the user with account REST (Case when we are removing existing attribute)
user.getAttributes().remove(attrName);
user = updateAndGet(user);
// Revert
user.getAttributes().remove("foo");
user.getAttributes().remove("someOtherAttr");
user = updateAndGet(user);
}
use of org.keycloak.representations.account.UserRepresentation in project keycloak by keycloak.
the class AccountRestServiceReadOnlyAttributesTest method testAccountUpdateAttributeExpectFailure.
private void testAccountUpdateAttributeExpectFailure(String attrName, boolean deniedForAdminAsWell) throws IOException {
// Attribute not yet supposed to be on the user
UserRepresentation user = SimpleHttp.doGet(getAccountUrl(null), httpClient).auth(tokenUtil.getToken()).asJson(UserRepresentation.class);
Assert.assertThat(user.getAttributes().keySet(), not(contains(attrName)));
// Assert not possible to add the attribute to the user
user.singleAttribute(attrName, "foo");
updateError(user, 400, Messages.UPDATE_READ_ONLY_ATTRIBUTES_REJECTED);
// Add the attribute to the user with admin REST (Case when we are adding new attribute)
UserResource adminUserResource = null;
org.keycloak.representations.idm.UserRepresentation adminUserRep = null;
try {
adminUserResource = ApiUtil.findUserByUsernameId(testRealm(), user.getUsername());
adminUserRep = adminUserResource.toRepresentation();
adminUserRep.singleAttribute(attrName, "foo");
adminUserResource.update(adminUserRep);
if (deniedForAdminAsWell) {
Assert.fail("Not expected to update attribute " + attrName + " by admin REST API");
}
} catch (BadRequestException bre) {
if (!deniedForAdminAsWell) {
Assert.fail("Was expected to update attribute " + attrName + " by admin REST API");
}
return;
}
// Update attribute of the user with account REST to the same value (Case when we are updating existing attribute) - should be fine as our attribute is not changed
user = SimpleHttp.doGet(getAccountUrl(null), httpClient).auth(tokenUtil.getToken()).asJson(UserRepresentation.class);
Assert.assertEquals("foo", user.getAttributes().get(attrName).get(0));
user.singleAttribute("someOtherAttr", "foo");
user = updateAndGet(user);
// Update attribute of the user with account REST (Case when we are updating existing attribute
user.singleAttribute(attrName, "foo-updated");
updateError(user, 400, Messages.UPDATE_READ_ONLY_ATTRIBUTES_REJECTED);
// Ignore removal of read-only attributes
user.getAttributes().remove(attrName);
user = updateAndGet(user);
assertTrue(user.getAttributes().containsKey(attrName));
// Revert with admin REST
adminUserRep.getAttributes().remove(attrName);
adminUserRep.getAttributes().remove("someOtherAttr");
adminUserResource.update(adminUserRep);
}
Aggregations