You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2017/07/28 11:23:07 UTC

[1/4] syncope git commit: [SYNCOPE-1175] Fixing token generation

Repository: syncope
Updated Branches:
  refs/heads/2_0_X 6fecdc2bc -> 98ab61e06
  refs/heads/master c04858494 -> b41675a33


[SYNCOPE-1175] Fixing token generation


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/0e4eed03
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/0e4eed03
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/0e4eed03

Branch: refs/heads/master
Commit: 0e4eed03e565107d7aa2801bc892aa099926fd82
Parents: c048584
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jul 28 13:21:55 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jul 28 13:22:25 2017 +0200

----------------------------------------------------------------------
 .../resources/UserSelfConfirmPasswordReset.java | 20 +++----------
 .../resources/UserSelfPasswordReset.java        | 31 +++++---------------
 .../app/js/controllers/UserController.js        | 14 ++++-----
 .../app/js/services/userSelfService.js          |  5 ++--
 .../resources/app/languages/en/static.json      |  6 ++--
 .../resources/app/languages/it/static.json      |  2 +-
 .../core/spring/security/SecureRandomUtils.java |  7 +++++
 .../src/test/resources/tests/create.js          |  2 +-
 .../src/test/resources/tests/edit.js            |  1 -
 9 files changed, 32 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/0e4eed03/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfConfirmPasswordReset.java
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfConfirmPasswordReset.java b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfConfirmPasswordReset.java
index 343ed64..8bb15c2 100644
--- a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfConfirmPasswordReset.java
+++ b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfConfirmPasswordReset.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.client.enduser.resources;
 
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.core.MediaType;
@@ -31,14 +29,14 @@ import org.apache.wicket.request.resource.AbstractResource;
 import org.apache.wicket.request.resource.IResource;
 
 @Resource(key = "userSelfConfirmPasswordReset", path = "/api/self/confirmPasswordReset")
-public class UserSelfConfirmPasswordReset extends BaseResource {
+public class UserSelfConfirmPasswordReset extends BaseUserSelfResource {
 
     private static final long serialVersionUID = -2721621682300247583L;
 
     @Override
     protected ResourceResponse newResourceResponse(final IResource.Attributes attributes) {
         ResourceResponse response = new AbstractResource.ResourceResponse();
-        response.setContentType(MediaType.APPLICATION_JSON);
+        response.setContentType(MediaType.TEXT_PLAIN);
         try {
             HttpServletRequest request = (HttpServletRequest) attributes.getRequest().getContainerRequest();
             if (!xsrfCheck(request)) {
@@ -61,18 +59,8 @@ public class UserSelfConfirmPasswordReset extends BaseResource {
             SyncopeEnduserSession.get().getService(UserSelfService.class).
                     confirmPasswordReset(token, parameters.get("newPassword")[0]);
 
-            final String responseMessage = new StringBuilder().append("Password changed correctly").toString();
-
-            response.setTextEncoding(StandardCharsets.UTF_8.name());
-            response.setWriteCallback(new WriteCallback() {
-
-                @Override
-                public void writeData(final Attributes attributes) throws IOException {
-                    attributes.getResponse().write(responseMessage);
-                }
-            });
-
-            response.setStatusCode(Response.Status.OK.getStatusCode());
+            buildResponse(response, Response.Status.OK.getStatusCode(),
+                    "Password successfully updated");
         } catch (final Exception e) {
             LOG.error("Error while updating user", e);
             response.setError(Response.Status.BAD_REQUEST.getStatusCode(), new StringBuilder()

http://git-wip-us.apache.org/repos/asf/syncope/blob/0e4eed03/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfPasswordReset.java
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfPasswordReset.java b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfPasswordReset.java
index f97d348..77408a6 100644
--- a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfPasswordReset.java
+++ b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfPasswordReset.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.client.enduser.resources;
 
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.core.MediaType;
@@ -33,14 +31,15 @@ import org.apache.wicket.request.resource.AbstractResource;
 import org.apache.wicket.request.resource.IResource;
 
 @Resource(key = "userSelfPasswordReset", path = "/api/self/requestPasswordReset")
-public class UserSelfPasswordReset extends BaseResource {
+public class UserSelfPasswordReset extends BaseUserSelfResource {
 
     private static final long serialVersionUID = -2721621682300247583L;
 
     @Override
     protected ResourceResponse newResourceResponse(final IResource.Attributes attributes) {
         ResourceResponse response = new AbstractResource.ResourceResponse();
-        response.setContentType(MediaType.APPLICATION_JSON);
+        response.setContentType(MediaType.TEXT_PLAIN);
+        String[] usernameParam = { "<unknown>" };
         try {
             HttpServletRequest request = (HttpServletRequest) attributes.getRequest().getContainerRequest();
             if (!xsrfCheck(request)) {
@@ -50,7 +49,7 @@ public class UserSelfPasswordReset extends BaseResource {
             }
 
             Map<String, String[]> parameters = request.getParameterMap();
-            String[] usernameParam = parameters.get("username");
+            usernameParam = parameters.get("username");
             if (ArrayUtils.isEmpty(usernameParam)) {
                 throw new Exception("A valid username should be provided");
             }
@@ -74,28 +73,12 @@ public class UserSelfPasswordReset extends BaseResource {
                 SyncopeEnduserSession.get().getService(UserSelfService.class).
                         requestPasswordReset(usernameParam[0], null);
             }
-            final String responseMessage = new StringBuilder().
-                    append("Password reset request sent for user ").append(usernameParam[0]).toString();
-
-            response.setTextEncoding(StandardCharsets.UTF_8.name());
-            response.setWriteCallback(new WriteCallback() {
-
-                @Override
-                public void writeData(final Attributes attributes) throws IOException {
-                    attributes.getResponse().write(responseMessage);
-                }
-            });
-
-            response.setStatusCode(Response.Status.OK.getStatusCode());
         } catch (final Exception e) {
             LOG.error("Error while updating user", e);
-            response.setError(Response.Status.BAD_REQUEST.getStatusCode(),
-                    new StringBuilder().
-                            append("ErrorMessage{{ ").
-                            append(e.getMessage()).
-                            append(" }}").
-                            toString());
         }
+
+        buildResponse(response, Response.Status.OK.getStatusCode(),
+                "Password reset request sent for user " + usernameParam[0]);
         return response;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0e4eed03/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
index 1afc42c..cfc57ed 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
+++ b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
@@ -446,8 +446,7 @@ angular.module("self").controller("UserController", ['$scope', '$rootScope', '$l
     $scope.retrieveSecurityQuestion = function (user) {
       if ($rootScope.pwdResetRequiringSecurityQuestions) {
         if (user && user.username && user.username.length) {
-          return SecurityQuestionService.
-                  getSecurityQuestionByUser(user.username).then(function (data) {
+          return SecurityQuestionService.getSecurityQuestionByUser(user.username).then(function (data) {
             $scope.userSecurityQuestion = data.content;
           }, function (response) {
             var errorMessage;
@@ -467,13 +466,15 @@ angular.module("self").controller("UserController", ['$scope', '$rootScope', '$l
 
     $scope.resetPassword = function (user) {
       if (user && user.username) {
-        $scope.retrieveSecurityQuestion(user);
         UserSelfService.passwordReset(user, $scope.captchaInput.value).then(function (data) {
-          console.info("User " + $scope.user.username);
           $rootScope.currentUser = $scope.user.username;
           $rootScope.currentOp = "PASSWORD_UPDATED";
           $translate.use($scope.languages.selectedLanguage.code);
-          $state.go('success');
+          $scope.success({successMessage: $filter('translate')(["USER"]).USER
+                    + " "
+                    + $scope.user.username
+                    + " "
+                    + $filter('translate')(["SUCCESSFULLY_UPDATED"]).SUCCESSFULLY_UPDATED});
         }, function (response) {
           var errorMessage;
           // parse error response 
@@ -499,9 +500,8 @@ angular.module("self").controller("UserController", ['$scope', '$rootScope', '$l
           var token = $location.search().token;
           if (user && user.password && token) {
             UserSelfService.confirmPasswordReset({"newPassword": user.password, "token": token}).then(function (data) {
-              $scope.showSuccess(data, $scope.notification);
               $translate.use($scope.languages.selectedLanguage.code);
-              $location.path('/self');
+              $scope.success({successMessage: $filter('translate')(["PASSWORD_UPDATED"]).PASSWORD_UPDATED});
             }, function (response) {
               var errorMessage;
               // parse error response 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0e4eed03/client/enduser/src/main/resources/META-INF/resources/app/js/services/userSelfService.js
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/services/userSelfService.js b/client/enduser/src/main/resources/META-INF/resources/app/js/services/userSelfService.js
index 9f9f444..39fd3a2 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/js/services/userSelfService.js
+++ b/client/enduser/src/main/resources/META-INF/resources/app/js/services/userSelfService.js
@@ -40,8 +40,7 @@ angular.module('login')
                                 headers: {'captcha': captcha}
                               })
                       .then(function (response) {
-                        var username = response;
-                        return username;
+                        return response;
                       }, function (response) {
                         console.error("Something went wrong during user self creation, exit with status: ", response);
                         return $q.reject(response.data || response.statusText);
@@ -54,7 +53,7 @@ angular.module('login')
                                 headers: {'captcha': captcha}
                               })
                       .then(function (response) {
-                        var username = response;
+                        return response;
                       }, function (response) {
                         console.error("Something went wrong during user self update, exit with status: ", response);
                         return $q.reject(response.data || response.statusText);

http://git-wip-us.apache.org/repos/asf/syncope/blob/0e4eed03/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json b/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json
index 076bd6c..90e5e19 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json
+++ b/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json
@@ -47,9 +47,9 @@
   "RESOURCES_PLACEHOLDER": "Click to select resources...",
   "REALM": "Realm",
   "NEWUSER": "New User",
-  "SUCCESSFULLY_CREATED": "succesfully created",
-  "SUCCESSFULLY_UPDATED": "succesfully updated",
-  "PASSWORD_UPDATED": ": password succesfully reset",
+  "SUCCESSFULLY_CREATED": "successfully created",
+  "SUCCESSFULLY_UPDATED": "successfully updated",
+  "PASSWORD_UPDATED": "Password successfully reset",
   "GOBACKHOME": "Click on this link to go back to the home page",
   "CONFIRM_REMOVE": "This will remove the current value. Continue?",
   "own": "Own"

http://git-wip-us.apache.org/repos/asf/syncope/blob/0e4eed03/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json b/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json
index d5c7038..e227a05 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json
+++ b/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json
@@ -49,7 +49,7 @@
   "REALM": "Realm",
   "SUCCESSFULLY_CREATED": "creato con successo",
   "SUCCESSFULLY_UPDATED": "aggiornato con successo",
-  "PASSWORD_UPDATED": ": password resettata con successo",
+  "PASSWORD_UPDATED": "Password resettata con successo",
   "GOBACKHOME": "Clicca su questo link per tornare alla home page",
   "CONFIRM_REMOVE": "Questa azione rimuoverà il valore corrente. Continuare?",
   "own": "Propri"

http://git-wip-us.apache.org/repos/asf/syncope/blob/0e4eed03/core/spring/src/main/java/org/apache/syncope/core/spring/security/SecureRandomUtils.java
----------------------------------------------------------------------
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/SecureRandomUtils.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/SecureRandomUtils.java
index 0e9e0ff..e68cb6b 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/SecureRandomUtils.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/SecureRandomUtils.java
@@ -26,6 +26,13 @@ public final class SecureRandomUtils {
 
     private static final RandomStringGenerator FOR_PASSWORD = new RandomStringGenerator.Builder().
             usingRandom(new SecureTextRandomProvider()).
+            filteredBy(new CharacterPredicate() {
+
+                @Override
+                public boolean test(final int codePoint) {
+                    return (codePoint >= 'a' && codePoint <= 'z') || (codePoint >= '0' && codePoint <= '9');
+                }
+            }).
             build();
 
     private static final RandomStringGenerator FOR_LETTERS = new RandomStringGenerator.Builder().

http://git-wip-us.apache.org/repos/asf/syncope/blob/0e4eed03/fit/enduser-reference/src/test/resources/tests/create.js
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/tests/create.js b/fit/enduser-reference/src/test/resources/tests/create.js
index b1f049f..bdf06e1 100644
--- a/fit/enduser-reference/src/test/resources/tests/create.js
+++ b/fit/enduser-reference/src/test/resources/tests/create.js
@@ -47,7 +47,7 @@ describe('syncope enduser user create', function () {
     selectedGroup.sendKeys('root');
     element.all(by.css('.ui-select-choices-row-inner span')).first().click();
     abstract.waitSpinner();
-    element.all(by.id('next')).first().click();
+    abstract.doNext();
 
     //plainSchemas
     abstract.waitSpinner();

http://git-wip-us.apache.org/repos/asf/syncope/blob/0e4eed03/fit/enduser-reference/src/test/resources/tests/edit.js
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/tests/edit.js b/fit/enduser-reference/src/test/resources/tests/edit.js
index 2da5240..9fa3f95 100644
--- a/fit/enduser-reference/src/test/resources/tests/edit.js
+++ b/fit/enduser-reference/src/test/resources/tests/edit.js
@@ -54,7 +54,6 @@ describe('syncope enduser user edit', function () {
     browser.wait(element(by.model('user.realm')).isPresent());
     element(by.model('user.realm')).click();
     element.all(by.repeater('realm in availableRealms')).get(0).click();
-    browser.wait(element(by.model('dynamicForm.selectedGroups')).isPresent());
     var group = element(by.model('dynamicForm.selectedGroups'));
     var selectedGroup = group.element(by.css('.ui-select-search'));
     group.click();


[3/4] syncope git commit: [SYNCOPE-1174] More robust conf params' default value management

Posted by il...@apache.org.
[SYNCOPE-1174] More robust conf params' default value management

This reverts commit 6634daaeebbe95fea9e1c104bc64d7b2e0d45e4b.


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/0c9f9585
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/0c9f9585
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/0c9f9585

Branch: refs/heads/2_0_X
Commit: 0c9f9585ba7a0c0c17eef4be511e8c372f808757
Parents: 6fecdc2
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jul 28 10:02:10 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jul 28 13:22:58 2017 +0200

----------------------------------------------------------------------
 .../apache/syncope/core/logic/GroupLogic.java   |  2 +-
 .../apache/syncope/core/logic/ReportLogic.java  |  6 +--
 .../apache/syncope/core/logic/SyncopeLogic.java |  6 +--
 .../apache/syncope/core/logic/TaskLogic.java    |  6 +--
 .../core/persistence/api/dao/ConfDAO.java       |  2 +-
 .../core/persistence/jpa/dao/JPAConfDAO.java    | 44 ++++----------------
 .../api/data/AccessTokenDataBinder.java         |  2 +-
 .../java/data/AccessTokenDataBinderImpl.java    | 15 ++-----
 .../java/data/ConnInstanceDataBinderImpl.java   |  2 +-
 .../java/data/ResourceDataBinderImpl.java       |  2 +-
 .../java/data/UserDataBinderImpl.java           |  9 ++--
 .../provisioning/java/job/JobManagerImpl.java   | 13 +++---
 .../notification/NotificationManagerImpl.java   |  2 +-
 .../core/spring/security/AuthDataAccessor.java  |  2 +-
 .../workflow/activiti/task/GenerateToken.java   |  4 +-
 .../workflow/flowable/task/GenerateToken.java   |  4 +-
 .../java/DefaultUserWorkflowAdapter.java        |  4 +-
 .../apache/syncope/core/logic/SAML2SPLogic.java |  2 +-
 18 files changed, 43 insertions(+), 84 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
index 52946a6..8098de0 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
@@ -431,7 +431,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
             Map<String, Object> jobDataMap = jobManager.register(
                     task,
                     null,
-                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                    confDAO.find("tasks.interruptMaxRetries", 1L));
 
             jobDataMap.put(TaskJob.DRY_RUN_JOBDETAIL_KEY, false);
             jobDataMap.put(GroupMemberProvisionTaskJobDelegate.GROUP_KEY_JOBDETAIL_KEY, key);

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
index 1f232ad..5243277 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
@@ -97,7 +97,7 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
             jobManager.register(
                     report,
                     null,
-                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                    confDAO.find("tasks.interruptMaxRetries", 1L));
         } catch (Exception e) {
             LOG.error("While registering quartz job for report " + report.getKey(), e);
 
@@ -123,7 +123,7 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
             jobManager.register(
                     report,
                     null,
-                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                    confDAO.find("tasks.interruptMaxRetries", 1L));
         } catch (Exception e) {
             LOG.error("While registering quartz job for report " + report.getKey(), e);
 
@@ -173,7 +173,7 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
             jobManager.register(
                     report,
                     startAt,
-                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                    confDAO.find("tasks.interruptMaxRetries", 1L));
 
             scheduler.getScheduler().triggerJob(JobNamer.getJobKey(report));
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index 03635bb..a309214 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -181,15 +181,15 @@ public class SyncopeLogic extends AbstractLogic<AbstractBaseBean> {
     private ImplementationLookup implLookup;
 
     public boolean isSelfRegAllowed() {
-        return confDAO.find("selfRegistration.allowed", "false").getValues().get(0).getBooleanValue();
+        return confDAO.find("selfRegistration.allowed", false);
     }
 
     public boolean isPwdResetAllowed() {
-        return confDAO.find("passwordReset.allowed", "false").getValues().get(0).getBooleanValue();
+        return confDAO.find("passwordReset.allowed", false);
     }
 
     public boolean isPwdResetRequiringSecurityQuestions() {
-        return confDAO.find("passwordReset.securityQuestion", "true").getValues().get(0).getBooleanValue();
+        return confDAO.find("passwordReset.securityQuestion", true);
     }
 
     @PreAuthorize("isAuthenticated()")

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
index a310e47..06e38d2 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
@@ -105,7 +105,7 @@ public class TaskLogic extends AbstractExecutableLogic<AbstractTaskTO> {
             jobManager.register(
                     task,
                     task.getStartAt(),
-                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                    confDAO.find("tasks.interruptMaxRetries", 1L));
         } catch (Exception e) {
             LOG.error("While registering quartz job for task " + task.getKey(), e);
 
@@ -133,7 +133,7 @@ public class TaskLogic extends AbstractExecutableLogic<AbstractTaskTO> {
             jobManager.register(
                     task,
                     task.getStartAt(),
-                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                    confDAO.find("tasks.interruptMaxRetries", 1L));
         } catch (Exception e) {
             LOG.error("While registering quartz job for task " + task.getKey(), e);
 
@@ -228,7 +228,7 @@ public class TaskLogic extends AbstractExecutableLogic<AbstractTaskTO> {
                     Map<String, Object> jobDataMap = jobManager.register(
                             (SchedTask) task,
                             startAt,
-                            confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                            confDAO.find("tasks.interruptMaxRetries", 1L));
 
                     jobDataMap.put(TaskJob.DRY_RUN_JOBDETAIL_KEY, dryRun);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
index 681ee67..b6fe304 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
@@ -25,7 +25,7 @@ public interface ConfDAO extends DAO<Conf> {
 
     CPlainAttr find(String key);
 
-    CPlainAttr find(String key, String defaultValue);
+    <T> T find(String key, T defaultValue);
 
     Conf get();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
index 3e4ea2c..3f11fea 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
@@ -19,17 +19,9 @@
 package org.apache.syncope.core.persistence.jpa.dao;
 
 import org.apache.syncope.core.persistence.api.dao.ConfDAO;
-import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
-import org.apache.syncope.core.persistence.api.entity.PlainAttrUniqueValue;
-import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
-import org.apache.syncope.core.persistence.api.entity.PlainSchema;
 import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
 import org.apache.syncope.core.persistence.api.entity.conf.Conf;
-import org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttr;
-import org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttrUniqueValue;
-import org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttrValue;
 import org.apache.syncope.core.persistence.jpa.entity.conf.JPAConf;
-import org.apache.syncope.core.spring.ApplicationContextProvider;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -38,17 +30,6 @@ public class JPAConfDAO extends AbstractDAO<Conf> implements ConfDAO {
 
     private static final String KEY = "cd64d66f-6fff-4008-b966-a06b1cc1436d";
 
-    private PlainSchemaDAO schemaDAO;
-
-    private PlainSchemaDAO schemaDAO() {
-        synchronized (this) {
-            if (schemaDAO == null) {
-                schemaDAO = ApplicationContextProvider.getApplicationContext().getBean(PlainSchemaDAO.class);
-            }
-        }
-        return schemaDAO;
-    }
-
     @Override
     public Conf get() {
         Conf instance = entityManager().find(JPAConf.class, KEY);
@@ -70,28 +51,17 @@ public class JPAConfDAO extends AbstractDAO<Conf> implements ConfDAO {
 
     @Transactional(readOnly = true)
     @Override
-    public CPlainAttr find(final String key, final String defaultValue) {
+    public <T> T find(final String key, final T defaultValue) {
         CPlainAttr result = find(key);
         if (result == null) {
-            PlainSchema schema = schemaDAO().find(key);
-            if (schema != null) {
-                JPACPlainAttr newAttr = new JPACPlainAttr();
-                newAttr.setSchema(schema);
-
-                PlainAttrValue attrValue;
-                if (newAttr.getSchema().isUniqueConstraint()) {
-                    attrValue = new JPACPlainAttrUniqueValue();
-                    ((PlainAttrUniqueValue) attrValue).setSchema(newAttr.getSchema());
-                } else {
-                    attrValue = new JPACPlainAttrValue();
-                }
-                newAttr.add(defaultValue, attrValue);
-
-                result = newAttr;
-            }
+            return defaultValue;
         }
 
-        return result;
+        return result.getUniqueValue() == null
+                ? result.getValues().isEmpty()
+                ? null
+                : result.getValues().get(0).<T>getValue()
+                : result.getUniqueValue().<T>getValue();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AccessTokenDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AccessTokenDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AccessTokenDataBinder.java
index be51926..065f5f7 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AccessTokenDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AccessTokenDataBinder.java
@@ -27,7 +27,7 @@ import org.apache.syncope.core.persistence.api.entity.AccessToken;
 
 public interface AccessTokenDataBinder {
 
-    Triple<String, String, Date> generateJWT(String subject, int duration, Map<String, Object> claims);
+    Triple<String, String, Date> generateJWT(String subject, long duration, Map<String, Object> claims);
 
     Pair<String, Date> create(String subject, Map<String, Object> claims, boolean replaceExisting);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java
index b415fb2..f30562d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java
@@ -38,7 +38,6 @@ import org.apache.syncope.core.persistence.api.dao.AccessTokenDAO;
 import org.apache.syncope.core.persistence.api.dao.ConfDAO;
 import org.apache.syncope.core.persistence.api.entity.AccessToken;
 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
-import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
 import org.apache.syncope.core.provisioning.api.data.AccessTokenDataBinder;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 import org.apache.syncope.core.spring.BeanUtils;
@@ -84,7 +83,7 @@ public class AccessTokenDataBinderImpl implements AccessTokenDataBinder {
 
     @Override
     public Triple<String, String, Date> generateJWT(
-            final String subject, final int duration, final Map<String, Object> claims) {
+            final String subject, final long duration, final Map<String, Object> claims) {
 
         credentialChecker.checkIsDefaultJWSKeyInUse();
 
@@ -125,17 +124,9 @@ public class AccessTokenDataBinderImpl implements AccessTokenDataBinder {
         }
 
         if (replaceExisting || body == null) {
-            int duration = 120;
-            CPlainAttr jwtLifetimeMins = confDAO.find("jwt.lifetime.minutes", "120");
-            if (jwtLifetimeMins != null) {
-                duration = jwtLifetimeMins.getValues().get(0).getLongValue().intValue();
-            } else {
-                LOG.warn("No schema found for 'jwt.lifetime.minutes'. Using default value of '120'");
-            }
-
             Triple<String, String, Date> created = generateJWT(
                     subject,
-                    duration,
+                    confDAO.find("jwt.lifetime.minutes", 120L),
                     claims);
 
             body = created.getMiddle();
@@ -174,7 +165,7 @@ public class AccessTokenDataBinderImpl implements AccessTokenDataBinder {
         credentialChecker.checkIsDefaultJWSKeyInUse();
 
         Date now = new Date();
-        int duration = confDAO.find("jwt.lifetime.minutes", "120").getValues().get(0).getLongValue().intValue();
+        long duration = confDAO.find("jwt.lifetime.minutes", 120L);
         Date expiry = new Date(now.getTime() + 60L * 1000L * duration);
         consumer.getJwtClaims().setExpiryTime(expiry.getTime());
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
index 06a8021..0fc31f7 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
@@ -140,7 +140,7 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
 
         // 2. ensure the maximum history size is not exceeded
         List<ConnInstanceHistoryConf> history = connInstanceHistoryConfDAO.findByEntity(connInstance);
-        long maxHistorySize = confDAO.find("connector.conf.history.size", "10").getValues().get(0).getLongValue();
+        long maxHistorySize = confDAO.find("connector.conf.history.size", 10L);
         if (maxHistorySize < history.size()) {
             // always remove the last item since history was obtained  by a query with ORDER BY creation DESC
             for (int i = 0; i < history.size() - maxHistorySize; i++) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
index ba6da63..b21a605 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
@@ -127,7 +127,7 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
 
             // 2. ensure the maximum history size is not exceeded
             List<ExternalResourceHistoryConf> history = resourceHistoryConfDAO.findByEntity(resource);
-            long maxHistorySize = confDAO.find("resource.conf.history.size", "10").getValues().get(0).getLongValue();
+            long maxHistorySize = confDAO.find("resource.conf.history.size", 10L);
             if (maxHistorySize < history.size()) {
                 // always remove the last item since history was obtained  by a query with ORDER BY creation DESC
                 for (int i = 0; i < history.size() - maxHistorySize; i++) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index ed77df4..7c291c0 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -116,7 +116,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
     @Transactional(readOnly = true)
     @Override
     public UserTO returnUserTO(final UserTO userTO) {
-        if (!confDAO.find("return.password.value", "false").getValues().get(0).getBooleanValue()) {
+        if (!confDAO.find("return.password.value", false)) {
             userTO.setPassword(null);
         }
         return userTO;
@@ -158,8 +158,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
 
     private void setPassword(final User user, final String password, final SyncopeClientCompositeException scce) {
         try {
-            String algorithm = confDAO.find(
-                    "password.cipher.algorithm", CipherAlgorithm.AES.name()).getValues().get(0).getStringValue();
+            String algorithm = confDAO.find("password.cipher.algorithm", CipherAlgorithm.AES.name());
             CipherAlgorithm predefined = CipherAlgorithm.valueOf(algorithm);
             user.setPassword(password, predefined);
         } catch (IllegalArgumentException e) {
@@ -642,8 +641,8 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
                 @Override
                 public MembershipTO transform(final Group group) {
                     MembershipTO membershipTO = new MembershipTO.Builder().
-                        group(group.getKey(), group.getName()).
-                        build();
+                            group(group.getKey(), group.getName()).
+                            build();
                     return membershipTO;
 
                 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java
index 0b2fba0..1af62c5 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java
@@ -30,7 +30,6 @@ import java.util.Set;
 import org.apache.commons.collections4.IterableUtils;
 import org.apache.commons.collections4.Predicate;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.TaskType;
@@ -307,16 +306,16 @@ public class JobManagerImpl implements JobManager, SyncopeLoader {
             public Pair<String, Long> exec() {
                 String notificationJobCronExpression = StringUtils.EMPTY;
 
-                CPlainAttr notificationJobCronExp =
-                        confDAO.find("notificationjob.cronExpression", NotificationJob.DEFAULT_CRON_EXP);
-                if (!notificationJobCronExp.getValuesAsStrings().isEmpty()) {
+                CPlainAttr notificationJobCronExp = confDAO.find("notificationjob.cronExpression");
+                if (notificationJobCronExp == null) {
+                    notificationJobCronExpression = NotificationJob.DEFAULT_CRON_EXP;
+                } else if (!notificationJobCronExp.getValuesAsStrings().isEmpty()) {
                     notificationJobCronExpression = notificationJobCronExp.getValuesAsStrings().get(0);
                 }
 
-                long interruptMaxRetries =
-                        confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue();
+                long interruptMaxRetries = confDAO.find("tasks.interruptMaxRetries", 1L);
 
-                return ImmutablePair.of(notificationJobCronExpression, interruptMaxRetries);
+                return Pair.of(notificationJobCronExpression, interruptMaxRetries);
             }
         });
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
index 1e6f531..5438cee 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
@@ -162,7 +162,7 @@ public class NotificationManagerImpl implements NotificationManager {
     @Transactional(readOnly = true)
     @Override
     public long getMaxRetries() {
-        return confDAO.find("notification.maxRetries", "0").getValues().get(0).getLongValue();
+        return confDAO.find("notification.maxRetries", 0L);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
----------------------------------------------------------------------
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
index 4668750..63e1cf1 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
@@ -221,7 +221,7 @@ public class AuthDataAccessor {
             boolean userModified = false;
             authenticated = AuthDataAccessor.this.authenticate(user, authentication.getCredentials().toString());
             if (authenticated) {
-                if (confDAO.find("log.lastlogindate", Boolean.toString(true)).getValues().get(0).getBooleanValue()) {
+                if (confDAO.find("log.lastlogindate", true)) {
                     user.setLastLoginDate(new Date());
                     userModified = true;
                 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/GenerateToken.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/GenerateToken.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/GenerateToken.java
index 9ce6941..a5e70e5 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/GenerateToken.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/GenerateToken.java
@@ -36,8 +36,8 @@ public class GenerateToken extends AbstractActivitiServiceTask {
                 getVariable(executionId, ActivitiUserWorkflowAdapter.USER, User.class);
 
         user.generateToken(
-                confDAO.find("token.length", "256").getValues().get(0).getLongValue().intValue(),
-                confDAO.find("token.expireTime", "60").getValues().get(0).getLongValue().intValue());
+                confDAO.find("token.length", 256L).intValue(),
+                confDAO.find("token.expireTime", 60L).intValue());
 
         engine.getRuntimeService().setVariable(executionId, ActivitiUserWorkflowAdapter.USER, user);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/workflow-flowable/src/main/java/org/apache/syncope/core/workflow/flowable/task/GenerateToken.java
----------------------------------------------------------------------
diff --git a/core/workflow-flowable/src/main/java/org/apache/syncope/core/workflow/flowable/task/GenerateToken.java b/core/workflow-flowable/src/main/java/org/apache/syncope/core/workflow/flowable/task/GenerateToken.java
index adbd31a..08f6000 100644
--- a/core/workflow-flowable/src/main/java/org/apache/syncope/core/workflow/flowable/task/GenerateToken.java
+++ b/core/workflow-flowable/src/main/java/org/apache/syncope/core/workflow/flowable/task/GenerateToken.java
@@ -36,8 +36,8 @@ public class GenerateToken extends AbstractFlowableServiceTask {
                 getVariable(executionId, FlowableUserWorkflowAdapter.USER, User.class);
 
         user.generateToken(
-                confDAO.find("token.length", "256").getValues().get(0).getLongValue().intValue(),
-                confDAO.find("token.expireTime", "60").getValues().get(0).getLongValue().intValue());
+                confDAO.find("token.length", 256L).intValue(),
+                confDAO.find("token.expireTime", 60L).intValue());
 
         engine.getRuntimeService().setVariable(executionId, FlowableUserWorkflowAdapter.USER, user);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
index a5f7361..f1cf759 100644
--- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
+++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
@@ -132,8 +132,8 @@ public class DefaultUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
     @Override
     protected void doRequestPasswordReset(final User user) {
         user.generateToken(
-                confDAO.find("token.length", "256").getValues().get(0).getLongValue().intValue(),
-                confDAO.find("token.expireTime", "60").getValues().get(0).getLongValue().intValue());
+                confDAO.find("token.length", 256L).intValue(),
+                confDAO.find("token.expireTime", 60L).intValue());
         userDAO.save(user);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/0c9f9585/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java
----------------------------------------------------------------------
diff --git a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java
index 59d6c2c..ab999d9 100644
--- a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java
+++ b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java
@@ -123,7 +123,7 @@ import org.apache.syncope.core.provisioning.api.data.ItemTransformer;
 @Component
 public class SAML2SPLogic extends AbstractSAML2Logic<AbstractBaseBean> {
 
-    private static final Integer JWT_RELAY_STATE_DURATION = 5;
+    private static final long JWT_RELAY_STATE_DURATION = 5L;
 
     private static final String JWT_CLAIM_IDP_DEFLATE = "IDP_DEFLATE";
 


[2/4] syncope git commit: [SYNCOPE-1174] More robust conf params' default value management

Posted by il...@apache.org.
[SYNCOPE-1174] More robust conf params' default value management

This reverts commit 6634daaeebbe95fea9e1c104bc64d7b2e0d45e4b.


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/b41675a3
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/b41675a3
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/b41675a3

Branch: refs/heads/master
Commit: b41675a335a7d6b4d297f0cd332738c21a6c29ba
Parents: 0e4eed0
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jul 28 10:02:10 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jul 28 13:22:44 2017 +0200

----------------------------------------------------------------------
 .../apache/syncope/core/logic/GroupLogic.java   |  2 +-
 .../apache/syncope/core/logic/ReportLogic.java  |  6 +--
 .../apache/syncope/core/logic/SyncopeLogic.java |  6 +--
 .../apache/syncope/core/logic/TaskLogic.java    |  6 +--
 .../core/persistence/api/dao/ConfDAO.java       |  2 +-
 .../core/persistence/jpa/dao/JPAConfDAO.java    | 44 ++++----------------
 .../api/data/AccessTokenDataBinder.java         |  2 +-
 .../java/data/AccessTokenDataBinderImpl.java    | 15 ++-----
 .../java/data/ConnInstanceDataBinderImpl.java   |  2 +-
 .../java/data/ResourceDataBinderImpl.java       |  2 +-
 .../java/data/UserDataBinderImpl.java           |  9 ++--
 .../provisioning/java/job/JobManagerImpl.java   | 13 +++---
 .../notification/NotificationManagerImpl.java   |  2 +-
 .../core/spring/security/AuthDataAccessor.java  |  2 +-
 .../workflow/activiti/task/GenerateToken.java   |  4 +-
 .../java/DefaultUserWorkflowAdapter.java        |  4 +-
 .../apache/syncope/core/logic/SAML2SPLogic.java |  2 +-
 17 files changed, 41 insertions(+), 82 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
index 52946a6..8098de0 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
@@ -431,7 +431,7 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> {
             Map<String, Object> jobDataMap = jobManager.register(
                     task,
                     null,
-                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                    confDAO.find("tasks.interruptMaxRetries", 1L));
 
             jobDataMap.put(TaskJob.DRY_RUN_JOBDETAIL_KEY, false);
             jobDataMap.put(GroupMemberProvisionTaskJobDelegate.GROUP_KEY_JOBDETAIL_KEY, key);

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
index 1f232ad..5243277 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ReportLogic.java
@@ -97,7 +97,7 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
             jobManager.register(
                     report,
                     null,
-                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                    confDAO.find("tasks.interruptMaxRetries", 1L));
         } catch (Exception e) {
             LOG.error("While registering quartz job for report " + report.getKey(), e);
 
@@ -123,7 +123,7 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
             jobManager.register(
                     report,
                     null,
-                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                    confDAO.find("tasks.interruptMaxRetries", 1L));
         } catch (Exception e) {
             LOG.error("While registering quartz job for report " + report.getKey(), e);
 
@@ -173,7 +173,7 @@ public class ReportLogic extends AbstractExecutableLogic<ReportTO> {
             jobManager.register(
                     report,
                     startAt,
-                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                    confDAO.find("tasks.interruptMaxRetries", 1L));
 
             scheduler.getScheduler().triggerJob(JobNamer.getJobKey(report));
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
index c373311..6b603b9 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SyncopeLogic.java
@@ -181,15 +181,15 @@ public class SyncopeLogic extends AbstractLogic<AbstractBaseBean> {
     private ImplementationLookup implLookup;
 
     public boolean isSelfRegAllowed() {
-        return confDAO.find("selfRegistration.allowed", "false").getValues().get(0).getBooleanValue();
+        return confDAO.find("selfRegistration.allowed", false);
     }
 
     public boolean isPwdResetAllowed() {
-        return confDAO.find("passwordReset.allowed", "false").getValues().get(0).getBooleanValue();
+        return confDAO.find("passwordReset.allowed", false);
     }
 
     public boolean isPwdResetRequiringSecurityQuestions() {
-        return confDAO.find("passwordReset.securityQuestion", "true").getValues().get(0).getBooleanValue();
+        return confDAO.find("passwordReset.securityQuestion", true);
     }
 
     @PreAuthorize("isAuthenticated()")

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
index a310e47..06e38d2 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/TaskLogic.java
@@ -105,7 +105,7 @@ public class TaskLogic extends AbstractExecutableLogic<AbstractTaskTO> {
             jobManager.register(
                     task,
                     task.getStartAt(),
-                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                    confDAO.find("tasks.interruptMaxRetries", 1L));
         } catch (Exception e) {
             LOG.error("While registering quartz job for task " + task.getKey(), e);
 
@@ -133,7 +133,7 @@ public class TaskLogic extends AbstractExecutableLogic<AbstractTaskTO> {
             jobManager.register(
                     task,
                     task.getStartAt(),
-                    confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                    confDAO.find("tasks.interruptMaxRetries", 1L));
         } catch (Exception e) {
             LOG.error("While registering quartz job for task " + task.getKey(), e);
 
@@ -228,7 +228,7 @@ public class TaskLogic extends AbstractExecutableLogic<AbstractTaskTO> {
                     Map<String, Object> jobDataMap = jobManager.register(
                             (SchedTask) task,
                             startAt,
-                            confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue());
+                            confDAO.find("tasks.interruptMaxRetries", 1L));
 
                     jobDataMap.put(TaskJob.DRY_RUN_JOBDETAIL_KEY, dryRun);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
index 681ee67..b6fe304 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ConfDAO.java
@@ -25,7 +25,7 @@ public interface ConfDAO extends DAO<Conf> {
 
     CPlainAttr find(String key);
 
-    CPlainAttr find(String key, String defaultValue);
+    <T> T find(String key, T defaultValue);
 
     Conf get();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
index 3e4ea2c..3f11fea 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAConfDAO.java
@@ -19,17 +19,9 @@
 package org.apache.syncope.core.persistence.jpa.dao;
 
 import org.apache.syncope.core.persistence.api.dao.ConfDAO;
-import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
-import org.apache.syncope.core.persistence.api.entity.PlainAttrUniqueValue;
-import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
-import org.apache.syncope.core.persistence.api.entity.PlainSchema;
 import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
 import org.apache.syncope.core.persistence.api.entity.conf.Conf;
-import org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttr;
-import org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttrUniqueValue;
-import org.apache.syncope.core.persistence.jpa.entity.conf.JPACPlainAttrValue;
 import org.apache.syncope.core.persistence.jpa.entity.conf.JPAConf;
-import org.apache.syncope.core.spring.ApplicationContextProvider;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -38,17 +30,6 @@ public class JPAConfDAO extends AbstractDAO<Conf> implements ConfDAO {
 
     private static final String KEY = "cd64d66f-6fff-4008-b966-a06b1cc1436d";
 
-    private PlainSchemaDAO schemaDAO;
-
-    private PlainSchemaDAO schemaDAO() {
-        synchronized (this) {
-            if (schemaDAO == null) {
-                schemaDAO = ApplicationContextProvider.getApplicationContext().getBean(PlainSchemaDAO.class);
-            }
-        }
-        return schemaDAO;
-    }
-
     @Override
     public Conf get() {
         Conf instance = entityManager().find(JPAConf.class, KEY);
@@ -70,28 +51,17 @@ public class JPAConfDAO extends AbstractDAO<Conf> implements ConfDAO {
 
     @Transactional(readOnly = true)
     @Override
-    public CPlainAttr find(final String key, final String defaultValue) {
+    public <T> T find(final String key, final T defaultValue) {
         CPlainAttr result = find(key);
         if (result == null) {
-            PlainSchema schema = schemaDAO().find(key);
-            if (schema != null) {
-                JPACPlainAttr newAttr = new JPACPlainAttr();
-                newAttr.setSchema(schema);
-
-                PlainAttrValue attrValue;
-                if (newAttr.getSchema().isUniqueConstraint()) {
-                    attrValue = new JPACPlainAttrUniqueValue();
-                    ((PlainAttrUniqueValue) attrValue).setSchema(newAttr.getSchema());
-                } else {
-                    attrValue = new JPACPlainAttrValue();
-                }
-                newAttr.add(defaultValue, attrValue);
-
-                result = newAttr;
-            }
+            return defaultValue;
         }
 
-        return result;
+        return result.getUniqueValue() == null
+                ? result.getValues().isEmpty()
+                ? null
+                : result.getValues().get(0).<T>getValue()
+                : result.getUniqueValue().<T>getValue();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AccessTokenDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AccessTokenDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AccessTokenDataBinder.java
index be51926..065f5f7 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AccessTokenDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/AccessTokenDataBinder.java
@@ -27,7 +27,7 @@ import org.apache.syncope.core.persistence.api.entity.AccessToken;
 
 public interface AccessTokenDataBinder {
 
-    Triple<String, String, Date> generateJWT(String subject, int duration, Map<String, Object> claims);
+    Triple<String, String, Date> generateJWT(String subject, long duration, Map<String, Object> claims);
 
     Pair<String, Date> create(String subject, Map<String, Object> claims, boolean replaceExisting);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java
index b415fb2..f30562d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AccessTokenDataBinderImpl.java
@@ -38,7 +38,6 @@ import org.apache.syncope.core.persistence.api.dao.AccessTokenDAO;
 import org.apache.syncope.core.persistence.api.dao.ConfDAO;
 import org.apache.syncope.core.persistence.api.entity.AccessToken;
 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
-import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
 import org.apache.syncope.core.provisioning.api.data.AccessTokenDataBinder;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 import org.apache.syncope.core.spring.BeanUtils;
@@ -84,7 +83,7 @@ public class AccessTokenDataBinderImpl implements AccessTokenDataBinder {
 
     @Override
     public Triple<String, String, Date> generateJWT(
-            final String subject, final int duration, final Map<String, Object> claims) {
+            final String subject, final long duration, final Map<String, Object> claims) {
 
         credentialChecker.checkIsDefaultJWSKeyInUse();
 
@@ -125,17 +124,9 @@ public class AccessTokenDataBinderImpl implements AccessTokenDataBinder {
         }
 
         if (replaceExisting || body == null) {
-            int duration = 120;
-            CPlainAttr jwtLifetimeMins = confDAO.find("jwt.lifetime.minutes", "120");
-            if (jwtLifetimeMins != null) {
-                duration = jwtLifetimeMins.getValues().get(0).getLongValue().intValue();
-            } else {
-                LOG.warn("No schema found for 'jwt.lifetime.minutes'. Using default value of '120'");
-            }
-
             Triple<String, String, Date> created = generateJWT(
                     subject,
-                    duration,
+                    confDAO.find("jwt.lifetime.minutes", 120L),
                     claims);
 
             body = created.getMiddle();
@@ -174,7 +165,7 @@ public class AccessTokenDataBinderImpl implements AccessTokenDataBinder {
         credentialChecker.checkIsDefaultJWSKeyInUse();
 
         Date now = new Date();
-        int duration = confDAO.find("jwt.lifetime.minutes", "120").getValues().get(0).getLongValue().intValue();
+        long duration = confDAO.find("jwt.lifetime.minutes", 120L);
         Date expiry = new Date(now.getTime() + 60L * 1000L * duration);
         consumer.getJwtClaims().setExpiryTime(expiry.getTime());
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
index 06a8021..0fc31f7 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConnInstanceDataBinderImpl.java
@@ -140,7 +140,7 @@ public class ConnInstanceDataBinderImpl implements ConnInstanceDataBinder {
 
         // 2. ensure the maximum history size is not exceeded
         List<ConnInstanceHistoryConf> history = connInstanceHistoryConfDAO.findByEntity(connInstance);
-        long maxHistorySize = confDAO.find("connector.conf.history.size", "10").getValues().get(0).getLongValue();
+        long maxHistorySize = confDAO.find("connector.conf.history.size", 10L);
         if (maxHistorySize < history.size()) {
             // always remove the last item since history was obtained  by a query with ORDER BY creation DESC
             for (int i = 0; i < history.size() - maxHistorySize; i++) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
index ba6da63..b21a605 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
@@ -127,7 +127,7 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
 
             // 2. ensure the maximum history size is not exceeded
             List<ExternalResourceHistoryConf> history = resourceHistoryConfDAO.findByEntity(resource);
-            long maxHistorySize = confDAO.find("resource.conf.history.size", "10").getValues().get(0).getLongValue();
+            long maxHistorySize = confDAO.find("resource.conf.history.size", 10L);
             if (maxHistorySize < history.size()) {
                 // always remove the last item since history was obtained  by a query with ORDER BY creation DESC
                 for (int i = 0; i < history.size() - maxHistorySize; i++) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index ed77df4..7c291c0 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -116,7 +116,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
     @Transactional(readOnly = true)
     @Override
     public UserTO returnUserTO(final UserTO userTO) {
-        if (!confDAO.find("return.password.value", "false").getValues().get(0).getBooleanValue()) {
+        if (!confDAO.find("return.password.value", false)) {
             userTO.setPassword(null);
         }
         return userTO;
@@ -158,8 +158,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
 
     private void setPassword(final User user, final String password, final SyncopeClientCompositeException scce) {
         try {
-            String algorithm = confDAO.find(
-                    "password.cipher.algorithm", CipherAlgorithm.AES.name()).getValues().get(0).getStringValue();
+            String algorithm = confDAO.find("password.cipher.algorithm", CipherAlgorithm.AES.name());
             CipherAlgorithm predefined = CipherAlgorithm.valueOf(algorithm);
             user.setPassword(password, predefined);
         } catch (IllegalArgumentException e) {
@@ -642,8 +641,8 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
                 @Override
                 public MembershipTO transform(final Group group) {
                     MembershipTO membershipTO = new MembershipTO.Builder().
-                        group(group.getKey(), group.getName()).
-                        build();
+                            group(group.getKey(), group.getName()).
+                            build();
                     return membershipTO;
 
                 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java
index 0b2fba0..1af62c5 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/JobManagerImpl.java
@@ -30,7 +30,6 @@ import java.util.Set;
 import org.apache.commons.collections4.IterableUtils;
 import org.apache.commons.collections4.Predicate;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.TaskType;
@@ -307,16 +306,16 @@ public class JobManagerImpl implements JobManager, SyncopeLoader {
             public Pair<String, Long> exec() {
                 String notificationJobCronExpression = StringUtils.EMPTY;
 
-                CPlainAttr notificationJobCronExp =
-                        confDAO.find("notificationjob.cronExpression", NotificationJob.DEFAULT_CRON_EXP);
-                if (!notificationJobCronExp.getValuesAsStrings().isEmpty()) {
+                CPlainAttr notificationJobCronExp = confDAO.find("notificationjob.cronExpression");
+                if (notificationJobCronExp == null) {
+                    notificationJobCronExpression = NotificationJob.DEFAULT_CRON_EXP;
+                } else if (!notificationJobCronExp.getValuesAsStrings().isEmpty()) {
                     notificationJobCronExpression = notificationJobCronExp.getValuesAsStrings().get(0);
                 }
 
-                long interruptMaxRetries =
-                        confDAO.find("tasks.interruptMaxRetries", "1").getValues().get(0).getLongValue();
+                long interruptMaxRetries = confDAO.find("tasks.interruptMaxRetries", 1L);
 
-                return ImmutablePair.of(notificationJobCronExpression, interruptMaxRetries);
+                return Pair.of(notificationJobCronExpression, interruptMaxRetries);
             }
         });
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
index 1e6f531..5438cee 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/NotificationManagerImpl.java
@@ -162,7 +162,7 @@ public class NotificationManagerImpl implements NotificationManager {
     @Transactional(readOnly = true)
     @Override
     public long getMaxRetries() {
-        return confDAO.find("notification.maxRetries", "0").getValues().get(0).getLongValue();
+        return confDAO.find("notification.maxRetries", 0L);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
----------------------------------------------------------------------
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
index 4668750..63e1cf1 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthDataAccessor.java
@@ -221,7 +221,7 @@ public class AuthDataAccessor {
             boolean userModified = false;
             authenticated = AuthDataAccessor.this.authenticate(user, authentication.getCredentials().toString());
             if (authenticated) {
-                if (confDAO.find("log.lastlogindate", Boolean.toString(true)).getValues().get(0).getBooleanValue()) {
+                if (confDAO.find("log.lastlogindate", true)) {
                     user.setLastLoginDate(new Date());
                     userModified = true;
                 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/GenerateToken.java
----------------------------------------------------------------------
diff --git a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/GenerateToken.java b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/GenerateToken.java
index 9ce6941..a5e70e5 100644
--- a/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/GenerateToken.java
+++ b/core/workflow-activiti/src/main/java/org/apache/syncope/core/workflow/activiti/task/GenerateToken.java
@@ -36,8 +36,8 @@ public class GenerateToken extends AbstractActivitiServiceTask {
                 getVariable(executionId, ActivitiUserWorkflowAdapter.USER, User.class);
 
         user.generateToken(
-                confDAO.find("token.length", "256").getValues().get(0).getLongValue().intValue(),
-                confDAO.find("token.expireTime", "60").getValues().get(0).getLongValue().intValue());
+                confDAO.find("token.length", 256L).intValue(),
+                confDAO.find("token.expireTime", 60L).intValue());
 
         engine.getRuntimeService().setVariable(executionId, ActivitiUserWorkflowAdapter.USER, user);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
index e3b87ba..429a2ce 100644
--- a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
+++ b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
@@ -127,8 +127,8 @@ public class DefaultUserWorkflowAdapter extends AbstractUserWorkflowAdapter {
     @Override
     protected void doRequestPasswordReset(final User user) {
         user.generateToken(
-                confDAO.find("token.length", "256").getValues().get(0).getLongValue().intValue(),
-                confDAO.find("token.expireTime", "60").getValues().get(0).getLongValue().intValue());
+                confDAO.find("token.length", 256L).intValue(),
+                confDAO.find("token.expireTime", 60L).intValue());
         userDAO.save(user);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/b41675a3/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java
----------------------------------------------------------------------
diff --git a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java
index 59d6c2c..ab999d9 100644
--- a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java
+++ b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java
@@ -123,7 +123,7 @@ import org.apache.syncope.core.provisioning.api.data.ItemTransformer;
 @Component
 public class SAML2SPLogic extends AbstractSAML2Logic<AbstractBaseBean> {
 
-    private static final Integer JWT_RELAY_STATE_DURATION = 5;
+    private static final long JWT_RELAY_STATE_DURATION = 5L;
 
     private static final String JWT_CLAIM_IDP_DEFLATE = "IDP_DEFLATE";
 


[4/4] syncope git commit: [SYNCOPE-1175] Fixing token generation

Posted by il...@apache.org.
[SYNCOPE-1175] Fixing token generation


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/98ab61e0
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/98ab61e0
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/98ab61e0

Branch: refs/heads/2_0_X
Commit: 98ab61e060a4045720b6d09e1392404ac461b7df
Parents: 0c9f958
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jul 28 13:21:55 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jul 28 13:22:58 2017 +0200

----------------------------------------------------------------------
 .../resources/UserSelfConfirmPasswordReset.java | 20 +++----------
 .../resources/UserSelfPasswordReset.java        | 31 +++++---------------
 .../app/js/controllers/UserController.js        | 14 ++++-----
 .../app/js/services/userSelfService.js          |  5 ++--
 .../resources/app/languages/en/static.json      |  6 ++--
 .../resources/app/languages/it/static.json      |  2 +-
 .../core/spring/security/SecureRandomUtils.java |  7 +++++
 .../src/test/resources/tests/create.js          |  2 +-
 .../src/test/resources/tests/edit.js            |  1 -
 9 files changed, 32 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/98ab61e0/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfConfirmPasswordReset.java
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfConfirmPasswordReset.java b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfConfirmPasswordReset.java
index 343ed64..8bb15c2 100644
--- a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfConfirmPasswordReset.java
+++ b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfConfirmPasswordReset.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.client.enduser.resources;
 
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.core.MediaType;
@@ -31,14 +29,14 @@ import org.apache.wicket.request.resource.AbstractResource;
 import org.apache.wicket.request.resource.IResource;
 
 @Resource(key = "userSelfConfirmPasswordReset", path = "/api/self/confirmPasswordReset")
-public class UserSelfConfirmPasswordReset extends BaseResource {
+public class UserSelfConfirmPasswordReset extends BaseUserSelfResource {
 
     private static final long serialVersionUID = -2721621682300247583L;
 
     @Override
     protected ResourceResponse newResourceResponse(final IResource.Attributes attributes) {
         ResourceResponse response = new AbstractResource.ResourceResponse();
-        response.setContentType(MediaType.APPLICATION_JSON);
+        response.setContentType(MediaType.TEXT_PLAIN);
         try {
             HttpServletRequest request = (HttpServletRequest) attributes.getRequest().getContainerRequest();
             if (!xsrfCheck(request)) {
@@ -61,18 +59,8 @@ public class UserSelfConfirmPasswordReset extends BaseResource {
             SyncopeEnduserSession.get().getService(UserSelfService.class).
                     confirmPasswordReset(token, parameters.get("newPassword")[0]);
 
-            final String responseMessage = new StringBuilder().append("Password changed correctly").toString();
-
-            response.setTextEncoding(StandardCharsets.UTF_8.name());
-            response.setWriteCallback(new WriteCallback() {
-
-                @Override
-                public void writeData(final Attributes attributes) throws IOException {
-                    attributes.getResponse().write(responseMessage);
-                }
-            });
-
-            response.setStatusCode(Response.Status.OK.getStatusCode());
+            buildResponse(response, Response.Status.OK.getStatusCode(),
+                    "Password successfully updated");
         } catch (final Exception e) {
             LOG.error("Error while updating user", e);
             response.setError(Response.Status.BAD_REQUEST.getStatusCode(), new StringBuilder()

http://git-wip-us.apache.org/repos/asf/syncope/blob/98ab61e0/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfPasswordReset.java
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfPasswordReset.java b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfPasswordReset.java
index f97d348..77408a6 100644
--- a/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfPasswordReset.java
+++ b/client/enduser/src/main/java/org/apache/syncope/client/enduser/resources/UserSelfPasswordReset.java
@@ -18,8 +18,6 @@
  */
 package org.apache.syncope.client.enduser.resources;
 
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.core.MediaType;
@@ -33,14 +31,15 @@ import org.apache.wicket.request.resource.AbstractResource;
 import org.apache.wicket.request.resource.IResource;
 
 @Resource(key = "userSelfPasswordReset", path = "/api/self/requestPasswordReset")
-public class UserSelfPasswordReset extends BaseResource {
+public class UserSelfPasswordReset extends BaseUserSelfResource {
 
     private static final long serialVersionUID = -2721621682300247583L;
 
     @Override
     protected ResourceResponse newResourceResponse(final IResource.Attributes attributes) {
         ResourceResponse response = new AbstractResource.ResourceResponse();
-        response.setContentType(MediaType.APPLICATION_JSON);
+        response.setContentType(MediaType.TEXT_PLAIN);
+        String[] usernameParam = { "<unknown>" };
         try {
             HttpServletRequest request = (HttpServletRequest) attributes.getRequest().getContainerRequest();
             if (!xsrfCheck(request)) {
@@ -50,7 +49,7 @@ public class UserSelfPasswordReset extends BaseResource {
             }
 
             Map<String, String[]> parameters = request.getParameterMap();
-            String[] usernameParam = parameters.get("username");
+            usernameParam = parameters.get("username");
             if (ArrayUtils.isEmpty(usernameParam)) {
                 throw new Exception("A valid username should be provided");
             }
@@ -74,28 +73,12 @@ public class UserSelfPasswordReset extends BaseResource {
                 SyncopeEnduserSession.get().getService(UserSelfService.class).
                         requestPasswordReset(usernameParam[0], null);
             }
-            final String responseMessage = new StringBuilder().
-                    append("Password reset request sent for user ").append(usernameParam[0]).toString();
-
-            response.setTextEncoding(StandardCharsets.UTF_8.name());
-            response.setWriteCallback(new WriteCallback() {
-
-                @Override
-                public void writeData(final Attributes attributes) throws IOException {
-                    attributes.getResponse().write(responseMessage);
-                }
-            });
-
-            response.setStatusCode(Response.Status.OK.getStatusCode());
         } catch (final Exception e) {
             LOG.error("Error while updating user", e);
-            response.setError(Response.Status.BAD_REQUEST.getStatusCode(),
-                    new StringBuilder().
-                            append("ErrorMessage{{ ").
-                            append(e.getMessage()).
-                            append(" }}").
-                            toString());
         }
+
+        buildResponse(response, Response.Status.OK.getStatusCode(),
+                "Password reset request sent for user " + usernameParam[0]);
         return response;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/98ab61e0/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
index 1afc42c..cfc57ed 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
+++ b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
@@ -446,8 +446,7 @@ angular.module("self").controller("UserController", ['$scope', '$rootScope', '$l
     $scope.retrieveSecurityQuestion = function (user) {
       if ($rootScope.pwdResetRequiringSecurityQuestions) {
         if (user && user.username && user.username.length) {
-          return SecurityQuestionService.
-                  getSecurityQuestionByUser(user.username).then(function (data) {
+          return SecurityQuestionService.getSecurityQuestionByUser(user.username).then(function (data) {
             $scope.userSecurityQuestion = data.content;
           }, function (response) {
             var errorMessage;
@@ -467,13 +466,15 @@ angular.module("self").controller("UserController", ['$scope', '$rootScope', '$l
 
     $scope.resetPassword = function (user) {
       if (user && user.username) {
-        $scope.retrieveSecurityQuestion(user);
         UserSelfService.passwordReset(user, $scope.captchaInput.value).then(function (data) {
-          console.info("User " + $scope.user.username);
           $rootScope.currentUser = $scope.user.username;
           $rootScope.currentOp = "PASSWORD_UPDATED";
           $translate.use($scope.languages.selectedLanguage.code);
-          $state.go('success');
+          $scope.success({successMessage: $filter('translate')(["USER"]).USER
+                    + " "
+                    + $scope.user.username
+                    + " "
+                    + $filter('translate')(["SUCCESSFULLY_UPDATED"]).SUCCESSFULLY_UPDATED});
         }, function (response) {
           var errorMessage;
           // parse error response 
@@ -499,9 +500,8 @@ angular.module("self").controller("UserController", ['$scope', '$rootScope', '$l
           var token = $location.search().token;
           if (user && user.password && token) {
             UserSelfService.confirmPasswordReset({"newPassword": user.password, "token": token}).then(function (data) {
-              $scope.showSuccess(data, $scope.notification);
               $translate.use($scope.languages.selectedLanguage.code);
-              $location.path('/self');
+              $scope.success({successMessage: $filter('translate')(["PASSWORD_UPDATED"]).PASSWORD_UPDATED});
             }, function (response) {
               var errorMessage;
               // parse error response 

http://git-wip-us.apache.org/repos/asf/syncope/blob/98ab61e0/client/enduser/src/main/resources/META-INF/resources/app/js/services/userSelfService.js
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/services/userSelfService.js b/client/enduser/src/main/resources/META-INF/resources/app/js/services/userSelfService.js
index 9f9f444..39fd3a2 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/js/services/userSelfService.js
+++ b/client/enduser/src/main/resources/META-INF/resources/app/js/services/userSelfService.js
@@ -40,8 +40,7 @@ angular.module('login')
                                 headers: {'captcha': captcha}
                               })
                       .then(function (response) {
-                        var username = response;
-                        return username;
+                        return response;
                       }, function (response) {
                         console.error("Something went wrong during user self creation, exit with status: ", response);
                         return $q.reject(response.data || response.statusText);
@@ -54,7 +53,7 @@ angular.module('login')
                                 headers: {'captcha': captcha}
                               })
                       .then(function (response) {
-                        var username = response;
+                        return response;
                       }, function (response) {
                         console.error("Something went wrong during user self update, exit with status: ", response);
                         return $q.reject(response.data || response.statusText);

http://git-wip-us.apache.org/repos/asf/syncope/blob/98ab61e0/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json b/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json
index 076bd6c..90e5e19 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json
+++ b/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json
@@ -47,9 +47,9 @@
   "RESOURCES_PLACEHOLDER": "Click to select resources...",
   "REALM": "Realm",
   "NEWUSER": "New User",
-  "SUCCESSFULLY_CREATED": "succesfully created",
-  "SUCCESSFULLY_UPDATED": "succesfully updated",
-  "PASSWORD_UPDATED": ": password succesfully reset",
+  "SUCCESSFULLY_CREATED": "successfully created",
+  "SUCCESSFULLY_UPDATED": "successfully updated",
+  "PASSWORD_UPDATED": "Password successfully reset",
   "GOBACKHOME": "Click on this link to go back to the home page",
   "CONFIRM_REMOVE": "This will remove the current value. Continue?",
   "own": "Own"

http://git-wip-us.apache.org/repos/asf/syncope/blob/98ab61e0/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json b/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json
index d5c7038..e227a05 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json
+++ b/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json
@@ -49,7 +49,7 @@
   "REALM": "Realm",
   "SUCCESSFULLY_CREATED": "creato con successo",
   "SUCCESSFULLY_UPDATED": "aggiornato con successo",
-  "PASSWORD_UPDATED": ": password resettata con successo",
+  "PASSWORD_UPDATED": "Password resettata con successo",
   "GOBACKHOME": "Clicca su questo link per tornare alla home page",
   "CONFIRM_REMOVE": "Questa azione rimuoverà il valore corrente. Continuare?",
   "own": "Propri"

http://git-wip-us.apache.org/repos/asf/syncope/blob/98ab61e0/core/spring/src/main/java/org/apache/syncope/core/spring/security/SecureRandomUtils.java
----------------------------------------------------------------------
diff --git a/core/spring/src/main/java/org/apache/syncope/core/spring/security/SecureRandomUtils.java b/core/spring/src/main/java/org/apache/syncope/core/spring/security/SecureRandomUtils.java
index 0e9e0ff..e68cb6b 100644
--- a/core/spring/src/main/java/org/apache/syncope/core/spring/security/SecureRandomUtils.java
+++ b/core/spring/src/main/java/org/apache/syncope/core/spring/security/SecureRandomUtils.java
@@ -26,6 +26,13 @@ public final class SecureRandomUtils {
 
     private static final RandomStringGenerator FOR_PASSWORD = new RandomStringGenerator.Builder().
             usingRandom(new SecureTextRandomProvider()).
+            filteredBy(new CharacterPredicate() {
+
+                @Override
+                public boolean test(final int codePoint) {
+                    return (codePoint >= 'a' && codePoint <= 'z') || (codePoint >= '0' && codePoint <= '9');
+                }
+            }).
             build();
 
     private static final RandomStringGenerator FOR_LETTERS = new RandomStringGenerator.Builder().

http://git-wip-us.apache.org/repos/asf/syncope/blob/98ab61e0/fit/enduser-reference/src/test/resources/tests/create.js
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/tests/create.js b/fit/enduser-reference/src/test/resources/tests/create.js
index b1f049f..bdf06e1 100644
--- a/fit/enduser-reference/src/test/resources/tests/create.js
+++ b/fit/enduser-reference/src/test/resources/tests/create.js
@@ -47,7 +47,7 @@ describe('syncope enduser user create', function () {
     selectedGroup.sendKeys('root');
     element.all(by.css('.ui-select-choices-row-inner span')).first().click();
     abstract.waitSpinner();
-    element.all(by.id('next')).first().click();
+    abstract.doNext();
 
     //plainSchemas
     abstract.waitSpinner();

http://git-wip-us.apache.org/repos/asf/syncope/blob/98ab61e0/fit/enduser-reference/src/test/resources/tests/edit.js
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/tests/edit.js b/fit/enduser-reference/src/test/resources/tests/edit.js
index 2da5240..9fa3f95 100644
--- a/fit/enduser-reference/src/test/resources/tests/edit.js
+++ b/fit/enduser-reference/src/test/resources/tests/edit.js
@@ -54,7 +54,6 @@ describe('syncope enduser user edit', function () {
     browser.wait(element(by.model('user.realm')).isPresent());
     element(by.model('user.realm')).click();
     element.all(by.repeater('realm in availableRealms')).get(0).click();
-    browser.wait(element(by.model('dynamicForm.selectedGroups')).isPresent());
     var group = element(by.model('dynamicForm.selectedGroups'));
     var selectedGroup = group.element(by.css('.ui-select-search'));
     group.click();