From fb561b8fd63e7e07d4ed1529364822939aef91f8 Mon Sep 17 00:00:00 2001 From: Christos Vasilakis Date: Wed, 24 Sep 2014 11:40:22 +0300 Subject: [PATCH 1/6] fix create-realm link --- examples/demo-template/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/demo-template/README.md b/examples/demo-template/README.md index 22a410855d..61ab2fb256 100755 --- a/examples/demo-template/README.md +++ b/examples/demo-template/README.md @@ -112,7 +112,7 @@ Next thing you have to do is import the test realm for the demo. Clicking on th create realm page in the Admin UI. The username/password is admin/admin to login in. Keycloak will ask you to create a new admin password before you can go to the create realm page. -[http://localhost:8080/auth/admin/index.html#/create/realm](http://localhost:8080/auth/admin/index.html#/create/realm) +[http://localhost:8080/auth/admin/master/console/#/create/realm](http://localhost:8080/auth/admin/master/console/#/create/realm) Import the testrealm.json file that is in the preconfigured-demo/ example directory. From 6d3aaa0560ef726f1c9ef89b4232b15efbffb6e2 Mon Sep 17 00:00:00 2001 From: Christos Vasilakis Date: Wed, 24 Sep 2014 12:58:18 +0300 Subject: [PATCH 2/6] fix docbook link --- docbook/reference/en/en-US/modules/access-types.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docbook/reference/en/en-US/modules/access-types.xml b/docbook/reference/en/en-US/modules/access-types.xml index 7d96dfba24..f478ceb3b8 100755 --- a/docbook/reference/en/en-US/modules/access-types.xml +++ b/docbook/reference/en/en-US/modules/access-types.xml @@ -44,7 +44,7 @@ For OAuth clients, you would also see a "Direct Access Only" switch when creating the OAuth Client. - This switch is for oauth clients that only use the Direct Access Grant + This switch is for oauth clients that only use the Direct Access Grant protocol to obtain access tokens. From c12577e8867b1444ca587d1febed0543973956fa Mon Sep 17 00:00:00 2001 From: Stian Thorgersen Date: Thu, 25 Sep 2014 11:53:28 +0200 Subject: [PATCH 3/6] Fix welcome-theme for testsuite --- .../src/main/resources/META-INF/keycloak-server.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/testsuite/integration/src/main/resources/META-INF/keycloak-server.json b/testsuite/integration/src/main/resources/META-INF/keycloak-server.json index 5aa1bacb54..6e90fa12df 100755 --- a/testsuite/integration/src/main/resources/META-INF/keycloak-server.json +++ b/testsuite/integration/src/main/resources/META-INF/keycloak-server.json @@ -41,8 +41,7 @@ "cacheThemes": "${keycloak.theme.cacheThemes:true}", "folder": { "dir": "${keycloak.theme.dir}" - }, - "welcomeTheme": "logo-example" + } }, "login": { From e17d6c81f9c68baed904602ab429e04b21fb0b18 Mon Sep 17 00:00:00 2001 From: Sebastien Blanc Date: Thu, 25 Sep 2014 17:42:20 +0200 Subject: [PATCH 4/6] change origin to * --- examples/cordova/www/config.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/cordova/www/config.xml b/examples/cordova/www/config.xml index c568b5a258..7bef553f8a 100644 --- a/examples/cordova/www/config.xml +++ b/examples/cordova/www/config.xml @@ -10,5 +10,5 @@ - + From 8006ea073bd544c9a3c1e266202b5a41c56f2f08 Mon Sep 17 00:00:00 2001 From: Stian Thorgersen Date: Thu, 25 Sep 2014 19:00:13 +0200 Subject: [PATCH 5/6] Fix cordova example --- examples/cordova/example-realm.json | 17 ++--------------- examples/cordova/www/index.html | 2 +- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/examples/cordova/example-realm.json b/examples/cordova/example-realm.json index 615d2caac0..f0d6ad282f 100755 --- a/examples/cordova/example-realm.json +++ b/examples/cordova/example-realm.json @@ -35,12 +35,6 @@ } ] }, - "roleMappings": [ - { - "username": "user", - "roles": ["user"] - } - ], "scopeMappings": [ { "client": "cordova", @@ -52,17 +46,10 @@ "name": "cordova", "enabled": true, "publicClient": true, - "redirectUris": [] + "redirectUris": ["http://localhost"], + "webOrigins": ["localhost"] } ], - "applicationRoleMappings": { - "account": [ - { - "username": "user", - "roles": ["view-profile", "manage-account"] - } - ] - }, "applicationScopeMappings": { "account": [ { diff --git a/examples/cordova/www/index.html b/examples/cordova/www/index.html index 88852671f2..9983ee856a 100644 --- a/examples/cordova/www/index.html +++ b/examples/cordova/www/index.html @@ -28,7 +28,7 @@ } document.addEventListener("deviceready", function() { - keycloak.init({ onLoad: 'check-sso' }); + keycloak.init({ onLoad: 'check-sso' }).success(updateState); }, false); From f2e97ff9d60a789417563ba6f127878bf3e5fab0 Mon Sep 17 00:00:00 2001 From: Stian Thorgersen Date: Thu, 25 Sep 2014 19:32:28 +0200 Subject: [PATCH 6/6] Add test to add/remove attributes to user through admin endpoints --- .../resources/admin/UsersResource.java | 6 +++ .../keycloak/testsuite/admin/UserTest.java | 51 +++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java b/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java index b04ef18297..fd38a4c2d9 100755 --- a/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java +++ b/services/src/main/java/org/keycloak/services/resources/admin/UsersResource.java @@ -186,6 +186,12 @@ public class UsersResource { for (Map.Entry attr : rep.getAttributes().entrySet()) { user.setAttribute(attr.getKey(), attr.getValue()); } + + for (String key : user.getAttributes().keySet()) { + if (!rep.getAttributes().containsKey(key)) { + user.removeAttribute(key); + } + } } } diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/UserTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/UserTest.java index 0d94657da5..2b2d70f4d0 100644 --- a/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/UserTest.java +++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/admin/UserTest.java @@ -10,6 +10,7 @@ import javax.ws.rs.core.Response; import java.util.List; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; /** @@ -149,4 +150,54 @@ public class UserTest extends AbstractClientTest { assertEquals(0, user.getSocialLinks().size()); } + @Test + public void attributes() { + UserRepresentation user1 = new UserRepresentation(); + user1.setUsername("user1"); + user1.attribute("attr1", "value1user1"); + user1.attribute("attr2", "value2user1"); + realm.users().create(user1); + + UserRepresentation user2 = new UserRepresentation(); + user2.setUsername("user2"); + user2.attribute("attr1", "value1user2"); + user2.attribute("attr2", "value2user2"); + realm.users().create(user2); + + user1 = realm.users().get("user1").toRepresentation(); + assertEquals(2, user1.getAttributes().size()); + assertEquals("value1user1", user1.getAttributes().get("attr1")); + assertEquals("value2user1", user1.getAttributes().get("attr2")); + + user2 = realm.users().get("user2").toRepresentation(); + assertEquals(2, user2.getAttributes().size()); + assertEquals("value1user2", user2.getAttributes().get("attr1")); + assertEquals("value2user2", user2.getAttributes().get("attr2")); + + user1.attribute("attr1", "value3user1"); + user1.attribute("attr3", "value4user1"); + + realm.users().get("user1").update(user1); + + user1 = realm.users().get("user1").toRepresentation(); + assertEquals(3, user1.getAttributes().size()); + assertEquals("value3user1", user1.getAttributes().get("attr1")); + assertEquals("value2user1", user1.getAttributes().get("attr2")); + assertEquals("value4user1", user1.getAttributes().get("attr3")); + + user1.getAttributes().remove("attr1"); + realm.users().get("user1").update(user1); + + user1 = realm.users().get("user1").toRepresentation(); + assertEquals(2, user1.getAttributes().size()); + assertEquals("value2user1", user1.getAttributes().get("attr2")); + assertEquals("value4user1", user1.getAttributes().get("attr3")); + + user1.getAttributes().clear(); + realm.users().get("user1").update(user1); + + user1 = realm.users().get("user1").toRepresentation(); + assertNull(user1.getAttributes()); + } + }