keycloak-aplcache
Changes
examples/cordova/example-realm.json 17(+2 -15)
examples/cordova/www/config.xml 2(+1 -1)
examples/cordova/www/index.html 2(+1 -1)
examples/demo-template/README.md 2(+1 -1)
Details
diff --git a/docbook/reference/en/en-US/modules/access-types.xml b/docbook/reference/en/en-US/modules/access-types.xml
index 7d96dfb..f478ceb 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 @@
<listitem>
<para>
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 <link linkend='direct-access-grant'>Direct Access Grant</link>
+ This switch is for oauth clients that only use the <link linkend='direct-access-grants'>Direct Access Grant</link>
protocol to obtain access tokens.
</para>
</listitem>
examples/cordova/example-realm.json 17(+2 -15)
diff --git a/examples/cordova/example-realm.json b/examples/cordova/example-realm.json
index 615d2ca..f0d6ad2 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": [
{
examples/cordova/www/config.xml 2(+1 -1)
diff --git a/examples/cordova/www/config.xml b/examples/cordova/www/config.xml
index c568b5a..7bef553 100644
--- a/examples/cordova/www/config.xml
+++ b/examples/cordova/www/config.xml
@@ -10,5 +10,5 @@
<gap:plugin name="org.apache.cordova.inappbrowser" />
- <access origin="http://*"/>
+ <access origin="*"/>
</widget>
examples/cordova/www/index.html 2(+1 -1)
diff --git a/examples/cordova/www/index.html b/examples/cordova/www/index.html
index 8885267..9983ee8 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);
</script>
</head>
examples/demo-template/README.md 2(+1 -1)
diff --git a/examples/demo-template/README.md b/examples/demo-template/README.md
index 22a4108..61ab2fb 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.
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 892d0b6..4c2c6e3 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
@@ -190,6 +190,12 @@ public class UsersResource {
for (Map.Entry<String, String> 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/main/resources/META-INF/keycloak-server.json b/testsuite/integration/src/main/resources/META-INF/keycloak-server.json
index 5aa1bac..6e90fa1 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": {
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 0d94657..2b2d70f 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());
+ }
+
}