keycloak-memoizeit
Details
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/app.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/app.js
index 311175d..3f571d3 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/app.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/app.js
@@ -431,8 +431,8 @@ module.directive('onoffswitch', function() {
offText: '@offText'
},
compile: function(element, attrs) {
- if (!attrs.onText) { attrs.onText = "ON"; }
- if (!attrs.offText) { attrs.offText = "OFF"; }
+ if (!attrs.onText) { attrs.onText = "YES"; }
+ if (!attrs.offText) { attrs.offText = "NO"; }
var html = "<div class=\"onoffswitch\">" +
"<input type=\"checkbox\" data-ng-model=\"ngModel\" class=\"onoffswitch-checkbox\" name=\"" + attrs.name + "\" id=\"" + attrs.id + "\">" +
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js
index 5fd7365..fffbfc0 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/realm.js
@@ -484,16 +484,29 @@ module.controller('RealmSocialCtrl', function($scope, realm, Realm, $location, N
});
-module.controller('RealmTokenDetailCtrl', function($scope, Realm, realm, $http, $location, Dialog, Notifications) {
+module.controller('RealmTokenDetailCtrl', function($scope, Realm, realm, $http, $location, Dialog, Notifications, TimeUnit) {
console.log('RealmTokenDetailCtrl');
- $scope.realm = { id : realm.id, realm : realm.realm, social : realm.social, registrationAllowed : realm.registrationAllowed,
- tokenLifespan : realm.tokenLifespan, accessCodeLifespan : realm.accessCodeLifespan,
- accessCodeLifespanUserAction : realm.accessCodeLifespanUserAction };
+ $scope.realm = { id : realm.id, realm : realm.realm, social : realm.social, registrationAllowed : realm.registrationAllowed };
+
+ $scope.realm.tokenLifespanUnit = TimeUnit.autoUnit(realm.tokenLifespan);
+ $scope.realm.tokenLifespan = TimeUnit.toUnit(realm.tokenLifespan, $scope.realm.tokenLifespanUnit);
+ $scope.$watch('realm.tokenLifespanUnit', function(to, from) {
+ $scope.realm.tokenLifespan = TimeUnit.convert($scope.realm.tokenLifespan, from, to);
+ });
+
+ $scope.realm.accessCodeLifespanUnit = TimeUnit.autoUnit(realm.accessCodeLifespan);
+ $scope.realm.accessCodeLifespan = TimeUnit.toUnit(realm.accessCodeLifespan, $scope.realm.accessCodeLifespanUnit);
+ $scope.$watch('realm.accessCodeLifespanUnit', function(to, from) {
+ $scope.realm.accessCodeLifespan = TimeUnit.convert($scope.realm.accessCodeLifespan, from, to);
+ });
+
+ $scope.realm.accessCodeLifespanUserActionUnit = TimeUnit.autoUnit(realm.accessCodeLifespanUserAction);
+ $scope.realm.accessCodeLifespanUserAction = TimeUnit.toUnit(realm.accessCodeLifespanUserAction, $scope.realm.accessCodeLifespanUserActionUnit);
+ $scope.$watch('realm.accessCodeLifespanUserActionUnit', function(to, from) {
+ $scope.realm.accessCodeLifespanUserAction = TimeUnit.convert($scope.realm.accessCodeLifespanUserAction, from, to);
+ });
- $scope.realm.tokenLifespanUnit = 'Seconds';
- $scope.realm.accessCodeLifespanUnit = 'Seconds';
- $scope.realm.accessCodeLifespanUserActionUnit = 'Seconds';
var oldCopy = angular.copy($scope.realm);
$scope.changed = false;
@@ -509,27 +522,11 @@ module.controller('RealmTokenDetailCtrl', function($scope, Realm, realm, $http,
delete realmCopy["tokenLifespanUnit"];
delete realmCopy["accessCodeLifespanUnit"];
delete realmCopy["accessCodeLifespanUserActionUnit"];
- if ($scope.realm.tokenLifespanUnit == 'Minutes') {
- realmCopy.tokenLifespan = $scope.realm.tokenLifespan * 60;
- } else if ($scope.realm.tokenLifespanUnit == 'Hours') {
- realmCopy.tokenLifespan = $scope.realm.tokenLifespan * 60 * 60;
- } else if ($scope.realm.tokenLifespanUnit == 'Days') {
- realmCopy.tokenLifespan = $scope.realm.tokenLifespan * 60 * 60 * 24;
- }
- if ($scope.realm.accessCodeLifespanUnit == 'Minutes') {
- realmCopy.accessCodeLifespan = $scope.realm.accessCodeLifespan * 60;
- } else if ($scope.realm.accessCodeLifespanUnit == 'Hours') {
- realmCopy.accessCodeLifespan = $scope.realm.accessCodeLifespan * 60 * 60;
- } else if ($scope.realm.accessCodeLifespanUnit == 'Days') {
- realmCopy.accessCodeLifespan = $scope.realm.accessCodeLifespan * 60 * 60 * 24;
- }
- if ($scope.realm.accessCodeLifespanUserActionUnit == 'Minutes') {
- realmCopy.accessCodeLifespanUserAction = $scope.realm.accessCodeLifespanUserAction * 60;
- } else if ($scope.realm.accessCodeLifespanUserActionUnit == 'Hours') {
- realmCopy.accessCodeLifespanUserAction = $scope.realm.accessCodeLifespanUserAction * 60 * 60;
- } else if ($scope.realm.accessCodeLifespanUserActionUnit == 'Days') {
- realmCopy.accessCodeLifespanUserAction = $scope.realm.accessCodeLifespanUserAction * 60 * 60 * 24;
- }
+
+ realmCopy.tokenLifespan = TimeUnit.toSeconds($scope.realm.tokenLifespan, $scope.realm.tokenLifespanUnit)
+ realmCopy.accessCodeLifespan = TimeUnit.toSeconds($scope.realm.accessCodeLifespan, $scope.realm.accessCodeLifespanUnit)
+ realmCopy.accessCodeLifespanUserAction = TimeUnit.toSeconds($scope.realm.accessCodeLifespanUserAction, $scope.realm.accessCodeLifespanUserActionUnit)
+
$scope.changed = false;
Realm.update(realmCopy, function () {
$location.url("/realms/" + realm.id + "/token-settings");
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/users.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/users.js
index fdddd07..0d4f4e8 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/users.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/controllers/users.js
@@ -120,9 +120,15 @@ module.controller('UserListCtrl', function($scope, realm, User) {
$scope.realm = realm;
$scope.searchQuery = function() {
$scope.searchLoaded = false;
- $scope.users = User.query({ realm: realm.id, search : $scope.search }, function() {
- $scope.searchLoaded = true;
- });
+ if ($scope.search) {
+ $scope.currentSearch = $scope.search;
+ $scope.users = User.query({ realm: realm.id, search : $scope.search }, function() {
+ $scope.searchLoaded = true;
+ });
+ } else {
+ $scope.currentSearch = null;
+ $scope.users = null;
+ }
};
});
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/js/services.js b/admin-ui/src/main/resources/META-INF/resources/admin/js/services.js
index c0e3c6a..8e7e6c5 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/js/services.js
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/js/services.js
@@ -226,9 +226,6 @@ module.factory('ApplicationOrigins', function($resource) {
});
});
-
-
-
module.factory('Current', function(Realm, $route) {
var current = {};
@@ -253,4 +250,52 @@ module.factory('Current', function(Realm, $route) {
current.refresh();
return current;
-});
\ No newline at end of file
+});
+
+module.factory('TimeUnit', function() {
+ var t = {};
+
+ t.autoUnit = function(time) {
+ var unit = 'Seconds';
+ if (time % 60 == 0) {
+ unit = 'Minutes';
+ time = time / 60;
+ }
+ if (time % 60 == 0) {
+ unit = 'Hours';
+ time = time / 60;
+ }
+ if (time % 24 == 0) {
+ unit = 'Days'
+ time = time / 24;
+ }
+ return unit;
+ }
+
+ t.toSeconds = function(time, unit) {
+ switch (unit) {
+ case 'Seconds': return time;
+ case 'Minutes': return time * 60;
+ case 'Hours': return time * 360;
+ case 'Days': return time * 86400;
+ default: throw 'invalid unit ' + unit;
+ }
+ }
+
+ t.toUnit = function(time, unit) {
+ switch (unit) {
+ case 'Seconds': return time;
+ case 'Minutes': return Math.ceil(time / 60);
+ case 'Hours': return Math.ceil(time / 360);
+ case 'Days': return Math.ceil(time / 86400);
+ default: throw 'invalid unit ' + unit;
+ }
+ }
+
+ t.convert = function(time, from, to) {
+ var seconds = t.toSeconds(time, from);
+ return t.toUnit(seconds, to);
+ }
+
+ return t;
+});
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-tokens.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-tokens.html
index 4921101..7a2b92b 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-tokens.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/realm-tokens.html
@@ -28,7 +28,7 @@
<div class="input-group">
<input type="text" data-ng-model="realm.tokenLifespan" id="tokenLifespan" name="tokenLifespan" class="tiny">
<div class="select-rcue">
- <select name="tokenLifespanUnit" data-ng-model="realm.tokenLifespanUnit">
+ <select name="tokenLifespanUnit" data-ng-model="realm.tokenLifespanUnit" >
<option data-ng-selected="!realm.tokenLifespanUnit">Seconds</option>
<option>Minutes</option>
<option>Hours</option>
diff --git a/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-list.html b/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-list.html
index 942ea95..c79b243 100755
--- a/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-list.html
+++ b/admin-ui/src/main/resources/META-INF/resources/admin/partials/user-list.html
@@ -33,7 +33,7 @@
</th>
</tr>
<tr>
- <tr data-ng-show="users.length > 0">
+ <tr data-ng-show="searchLoaded && users.length > 0">
<th>Username</th>
<th>Last Name</th>
<th>First Name</th>
@@ -66,7 +66,7 @@
<div class="feedback warning inline" data-ng-show="searchLoaded && users.length == 0">
<p><strong>Your search returned no results.</strong><br>Try modifying the query and try again.</p>
</div>
- <div class="feedback info inline" data-ng-show="!search">
+ <div class="feedback info inline" data-ng-show="!currentSearch">
<br/>
<p><strong>Search for users.</strong><br>Please enter a search to display users.</p>
</div>
dist/src/main/xslt/standalone.xsl 4(+2 -2)
diff --git a/dist/src/main/xslt/standalone.xsl b/dist/src/main/xslt/standalone.xsl
index 711b71f..2507ba3 100644
--- a/dist/src/main/xslt/standalone.xsl
+++ b/dist/src/main/xslt/standalone.xsl
@@ -14,7 +14,7 @@
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
- <connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;DB_CLOSE_DELAY=-1</connection-url>
+ <connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
@@ -30,4 +30,4 @@
</xsl:copy>
</xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
+</xsl:stylesheet>
diff --git a/dist-as7/src/main/xslt/standalone.xsl b/dist-as7/src/main/xslt/standalone.xsl
index 711b71f..2507ba3 100644
--- a/dist-as7/src/main/xslt/standalone.xsl
+++ b/dist-as7/src/main/xslt/standalone.xsl
@@ -14,7 +14,7 @@
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
- <connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;DB_CLOSE_DELAY=-1</connection-url>
+ <connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
@@ -30,4 +30,4 @@
</xsl:copy>
</xsl:template>
-</xsl:stylesheet>
\ No newline at end of file
+</xsl:stylesheet>
model/jpa/pom.xml 1(+1 -0)
diff --git a/model/jpa/pom.xml b/model/jpa/pom.xml
index c8cba66..e766c70 100755
--- a/model/jpa/pom.xml
+++ b/model/jpa/pom.xml
@@ -38,6 +38,7 @@
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.entitymanager.version}</version>
+ <scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
index 7f98fd0..96e539a 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
@@ -666,7 +666,8 @@ public class RealmAdapter implements RealmModel {
@Override
public List<UserModel> searchForUser(String search) {
- TypedQuery<UserEntity> query = em.createQuery("select u from UserEntity u where lower(u.loginName) like :search or lower(concat(u.firstName, ' ', u.lastName)) like :search or u.email like :search", UserEntity.class);
+ TypedQuery<UserEntity> query = em.createQuery("select u from UserEntity u where u.realm = :realm and lower(u.loginName) like :search or lower(concat(u.firstName, ' ', u.lastName)) like :search or u.email like :search", UserEntity.class);
+ query.setParameter("realm", realm);
query.setParameter("search", "%" + search.toLowerCase() + "%");
List<UserEntity> results = query.getResultList();
List<UserModel> users = new ArrayList<UserModel>();
pom.xml 2(+1 -1)
diff --git a/pom.xml b/pom.xml
index e3d08f5..19630c6 100755
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,7 @@
<mongo.driver.version>2.11.2</mongo.driver.version>
<jboss.logging.version>3.1.1.GA</jboss.logging.version>
<hibernate.javax.persistence.version>1.0.1.Final</hibernate.javax.persistence.version>
- <hibernate.entitymanager.version>3.6.6.Final</hibernate.entitymanager.version>
+ <hibernate.entitymanager.version>4.0.1.Final</hibernate.entitymanager.version>
<h2.version>1.3.161</h2.version>
<dom4j.version>1.6.1</dom4j.version>
<mysql.version>5.1.25</mysql.version>
diff --git a/services/src/test/java/org/keycloak/test/AdapterTest.java b/services/src/test/java/org/keycloak/test/AdapterTest.java
index c0c1382..a600f6f 100755
--- a/services/src/test/java/org/keycloak/test/AdapterTest.java
+++ b/services/src/test/java/org/keycloak/test/AdapterTest.java
@@ -303,6 +303,7 @@ public class AdapterTest extends AbstractKeycloakTest {
}
RealmManager adapter = getRealmManager();
+ adapter.createRealm("other").addUser("bburke");
{
List<UserModel> userModels = adapter.searchUsers("total junk query", realmModel);