keycloak-aplcache
Changes
testsuite/integration-arquillian/tests/base/src/main/resources/META-INF/services/org.keycloak.storage.UserStorageProviderFactory 1(+1 -0)
Details
diff --git a/services/src/main/java/org/keycloak/services/resources/admin/UserResource.java b/services/src/main/java/org/keycloak/services/resources/admin/UserResource.java
index 5af5beb..98b7e75 100755
--- a/services/src/main/java/org/keycloak/services/resources/admin/UserResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/admin/UserResource.java
@@ -201,6 +201,8 @@ public class UserResource {
if (rep.isEnabled() != null) user.setEnabled(rep.isEnabled());
if (rep.isEmailVerified() != null) user.setEmailVerified(rep.isEmailVerified());
+ if (rep.getFederationLink() != null) user.setFederationLink(rep.getFederationLink());
+
List<String> reqActions = rep.getRequiredActions();
if (reqActions != null) {
diff --git a/testsuite/integration-arquillian/tests/base/src/main/resources/META-INF/services/org.keycloak.storage.UserStorageProviderFactory b/testsuite/integration-arquillian/tests/base/src/main/resources/META-INF/services/org.keycloak.storage.UserStorageProviderFactory
new file mode 100755
index 0000000..68493ad
--- /dev/null
+++ b/testsuite/integration-arquillian/tests/base/src/main/resources/META-INF/services/org.keycloak.storage.UserStorageProviderFactory
@@ -0,0 +1 @@
+org.keycloak.testsuite.federation.DummyUserFederationProviderFactory
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/AbstractAdminTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/AbstractAdminTest.java
old mode 100644
new mode 100755
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/UserTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/UserTest.java
index 58193e9..8442339 100755
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/UserTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/UserTest.java
@@ -40,6 +40,7 @@ import org.keycloak.models.PasswordPolicy;
import org.keycloak.models.RealmModel;
import org.keycloak.models.UserModel;
import org.keycloak.representations.idm.ClientRepresentation;
+import org.keycloak.representations.idm.ComponentRepresentation;
import org.keycloak.representations.idm.CredentialRepresentation;
import org.keycloak.representations.idm.ErrorRepresentation;
import org.keycloak.representations.idm.FederatedIdentityRepresentation;
@@ -50,7 +51,10 @@ import org.keycloak.representations.idm.RequiredActionProviderRepresentation;
import org.keycloak.representations.idm.RoleRepresentation;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.services.resources.RealmsResource;
+import org.keycloak.storage.UserStorageProvider;
import org.keycloak.testsuite.AbstractTestRealmKeycloakTest;
+import org.keycloak.testsuite.federation.DummyUserFederationProvider;
+import org.keycloak.testsuite.federation.DummyUserFederationProviderFactory;
import org.keycloak.testsuite.page.LoginPasswordUpdatePage;
import org.keycloak.testsuite.pages.ErrorPage;
import org.keycloak.testsuite.pages.InfoPage;
@@ -120,11 +124,12 @@ public class UserTest extends AbstractAdminTest {
@Deployment
public static WebArchive deploy() {
return RunOnServerDeployment.create(
- AbstractAdminTest.class,
- AbstractTestRealmKeycloakTest.class,
+ AbstractAdminTest.class,
+ AbstractTestRealmKeycloakTest.class,
+ DummyUserFederationProviderFactory.class, DummyUserFederationProvider.class,
UserResource.class);
}
-
+
public String createUser() {
return createUser("user1", "user1@localhost");
}
@@ -189,13 +194,13 @@ public class UserTest extends AbstractAdminTest {
assertEquals(409, response.getStatus());
response.close();
}
-
+
@Test
public void createUserWithHashedCredentials() {
UserRepresentation user = new UserRepresentation();
user.setUsername("user_creds");
user.setEmail("email@localhost");
-
+
CredentialRepresentation hashedPassword = new CredentialRepresentation();
hashedPassword.setAlgorithm("my-algorithm");
hashedPassword.setCounter(11);
@@ -207,11 +212,11 @@ public class UserTest extends AbstractAdminTest {
hashedPassword.setPeriod(99);
hashedPassword.setSalt(Base64.encodeBytes("theSalt".getBytes()));
hashedPassword.setType(CredentialRepresentation.PASSWORD);
-
+
user.setCredentials(Arrays.asList(hashedPassword));
-
+
createUser(user);
-
+
CredentialModel credentialHashed = fetchCredentials("user_creds");
assertNotNull("Expecting credential", credentialHashed);
assertEquals("my-algorithm", credentialHashed.getAlgorithm());
@@ -225,7 +230,7 @@ public class UserTest extends AbstractAdminTest {
assertEquals("theSalt", new String(credentialHashed.getSalt()));
assertEquals(CredentialRepresentation.PASSWORD, credentialHashed.getType());
}
-
+
@Test
public void createUserWithRawCredentials() {
UserRepresentation user = new UserRepresentation();
@@ -236,7 +241,7 @@ public class UserTest extends AbstractAdminTest {
rawPassword.setValue("ABCD");
rawPassword.setType(CredentialRepresentation.PASSWORD);
user.setCredentials(Arrays.asList(rawPassword));
-
+
createUser(user);
CredentialModel credential = fetchCredentials("user_rawpw");
@@ -246,7 +251,7 @@ public class UserTest extends AbstractAdminTest {
assertNotEquals("ABCD", credential.getValue());
assertEquals(CredentialRepresentation.PASSWORD, credential.getType());
}
-
+
private CredentialModel fetchCredentials(String username) {
return getTestingClient().server(REALM_NAME).fetch(session -> {
RealmModel realm = session.getContext().getRealm();
@@ -256,7 +261,7 @@ public class UserTest extends AbstractAdminTest {
return storedCredentialsByType.get(0);
}, CredentialModel.class);
}
-
+
@Test
public void createDuplicatedUser3() {
createUser();
@@ -267,7 +272,7 @@ public class UserTest extends AbstractAdminTest {
assertEquals(409, response.getStatus());
response.close();
}
-
+
@Test
public void createDuplicatedUser4() {
createUser();
@@ -290,7 +295,7 @@ public class UserTest extends AbstractAdminTest {
assertEquals(409, response.getStatus());
response.close();
}
-
+
@Test
public void createDuplicatedUser6() {
createUser();
@@ -317,7 +322,33 @@ public class UserTest extends AbstractAdminTest {
assertAdminEvents.assertEmpty();
}
-
+
+ @Test
+ public void createUserWithFederationLink() {
+
+ // add a dummy federation provider
+ ComponentRepresentation dummyFederationProvider = new ComponentRepresentation();
+ dummyFederationProvider.setId(DummyUserFederationProviderFactory.PROVIDER_NAME);
+ dummyFederationProvider.setName(DummyUserFederationProviderFactory.PROVIDER_NAME);
+ dummyFederationProvider.setProviderId(DummyUserFederationProviderFactory.PROVIDER_NAME);
+ dummyFederationProvider.setProviderType(UserStorageProvider.class.getName());
+ adminClient.realms().realm(REALM_NAME).components().add(dummyFederationProvider);
+
+ assertAdminEvents.assertEvent(realmId, OperationType.CREATE, AdminEventPaths.componentPath(DummyUserFederationProviderFactory.PROVIDER_NAME), dummyFederationProvider, ResourceType.COMPONENT);
+
+ UserRepresentation user = new UserRepresentation();
+ user.setUsername("user1");
+ user.setEmail("user1@localhost");
+ user.setFederationLink(DummyUserFederationProviderFactory.PROVIDER_NAME);
+
+ String userId = createUser(user);
+
+ // fetch user again and see federation link filled in
+ UserRepresentation createdUser = realm.users().get(userId).toRepresentation();
+ assertNotNull(createdUser);
+ assertEquals(user.getFederationLink(), createdUser.getFederationLink());
+ }
+
private void createUsers() {
for (int i = 1; i < 10; i++) {
UserRepresentation user = new UserRepresentation();