User self edition case
authorCharles du Jeu <charles.dujeu@gmail.com>
Wed, 24 Feb 2010 11:38:23 +0000 (11:38 +0000)
committerCharles du Jeu <charles.dujeu@gmail.com>
Wed, 24 Feb 2010 11:38:23 +0000 (11:38 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@3400 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/SecurityAPI.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/components/PasswordCredentialImpl.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/components/UserEditor.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/components/UserEditorPrefPane.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/model/User.js

index 0d26d4776ab68f5f10d4fddb57e88ae23c047c4b..55b9053b49be4cf082c32f2d08b8f120ff6ecf0d 100644 (file)
@@ -10,6 +10,7 @@ qx.Class.define("org.argeo.security.ria.SecurityAPI", {
                USER_EXISTS_SERVICE : "userExists.security",            \r
                DELETE_USER_SERVICE : "deleteUser.security",\r
                UPDATE_USER_SERVICE : "updateUser.security",\r
+               UPDATE_USER_SELF_SERVICE : "updateUserSelf.security",\r
                GET_USER_DETAILS_SERVICE : "getUserDetails.security",\r
                CREATE_USER_SERVICE : "createUser.security",\r
                UPDATE_USER_PASS_SERVICE : "updateUserPassword.security",\r
@@ -55,7 +56,7 @@ qx.Class.define("org.argeo.security.ria.SecurityAPI", {
                        var serviceManager = org.argeo.ria.remote.RequestManager.getInstance();\r
                        for(var i=startIndex;i<argumentsArray.length;i++){\r
                                var argument = argumentsArray[i];\r
-                               if(qx.lang.Array.isArray(argument)){\r
+                               if(qx.lang.Type.isArray(argument)){\r
                                        serviceManager.attachILoadStatusables(request, argument);\r
                                }else if(typeof argument == "string"){\r
                                        serviceManager.attachReloadEventType(request, argument);\r
@@ -102,8 +103,9 @@ qx.Class.define("org.argeo.security.ria.SecurityAPI", {
                /**\r
                 * @return  {qx.io.remote.Request}\r
                 */\r
-               getUpdateUserService : function(userObject){\r
-                       var req = org.argeo.security.ria.SecurityAPI.getServiceRequest(org.argeo.security.ria.SecurityAPI.UPDATE_USER_SERVICE);\r
+               getUpdateUserService : function(userObject, self){\r
+                       var service = (self?org.argeo.security.ria.SecurityAPI.UPDATE_USER_SELF_SERVICE:org.argeo.security.ria.SecurityAPI.UPDATE_USER_SERVICE);\r
+                       var req = org.argeo.security.ria.SecurityAPI.getServiceRequest(service);\r
                        req.setMethod("POST");\r
                        org.argeo.security.ria.SecurityAPI.parseOptionalArguments(req, arguments, 1);\r
                        var jsonString = qx.util.Json.stringify(userObject);\r
@@ -137,10 +139,10 @@ qx.Class.define("org.argeo.security.ria.SecurityAPI", {
                 * @return  {qx.io.remote.Request}\r
                 */\r
                getUpdatePassService : function(oldPassword, newPassword){\r
-                       var req = org.argeo.security.ria.SecurityAPI.getServiceRequest(org.argeo.security.ria.SecurityAPI.UPDATE_USER_PASS_SERVICE);\r
+                       var req = org.argeo.security.ria.SecurityAPI.getServiceRequest(org.argeo.security.ria.SecurityAPI.UPDATE_PASS_SERVICE);\r
                        org.argeo.security.ria.SecurityAPI.parseOptionalArguments(req, arguments, 2);\r
                        req.setParameter("password", newPassword);\r
-                       req.setParameter("oldpassword", oldPassword);\r
+                       req.setParameter("oldPassword", oldPassword);\r
                        return req;\r
                },\r
                \r
index a7b648b230e5d9f7623ac67c9543ce769ca1c8a4..48723506ef7e71a8866dd3fa82161cefe34bb4da 100644 (file)
@@ -8,6 +8,9 @@ qx.Class.define("org.argeo.security.ria.components.PasswordCredentialImpl", {
                valid : {\r
                        init : false\r
                },\r
+               selfEdition : {\r
+                       init : false\r
+               },\r
                encoderCallback : {\r
                        init : function(string){\r
                                var encoderShort = org.argeo.ria.util.Encoder;\r
@@ -17,13 +20,23 @@ qx.Class.define("org.argeo.security.ria.components.PasswordCredentialImpl", {
                }\r
        },\r
        \r
-       construct : function(){\r
+       construct : function(selfEdition){\r
                this.base(arguments);\r
+               if(selfEdition){\r
+                       this.setSelfEdition(selfEdition);\r
+               }\r
                this.setLayout(new qx.ui.layout.HBox(5, "center"));\r
-               this.add(new qx.ui.basic.Label("Password"), {flex:1});\r
+               this.getLayout().setAlignY("middle");\r
+               if(this.getSelfEdition()){\r
+                       this.oldPass = new qx.ui.form.PasswordField();\r
+                       this.add(new qx.ui.basic.Label("Old"), {flex:1});\r
+                       this.add(this.oldPass, {flex:2});\r
+                       this.oldPass.addListener("changeValue", function(){this.fireEvent("modified");}, this);\r
+               }\r
+               this.add(new qx.ui.basic.Label((selfEdition?"New":"Password")), {flex:1});\r
                this.pass1 = new qx.ui.form.PasswordField();\r
                this.add(this.pass1, {flex:2});\r
-               this.add(new qx.ui.basic.Label("Confirm Password"), {flex:1});\r
+               this.add(new qx.ui.basic.Label((selfEdition?"Confirm":"Confirm Password")), {flex:1});\r
                this.pass2 = new qx.ui.form.PasswordField();\r
                this.add(this.pass2, {flex:2});\r
                this.pass1.addListener("changeValue", function(){this.fireEvent("modified");}, this);\r
@@ -36,22 +49,28 @@ qx.Class.define("org.argeo.security.ria.components.PasswordCredentialImpl", {
                        return this;\r
                },\r
                getData : function(format){\r
-                       var encoded = null;\r
+                       var encoder = this.getEncoderCallback();\r
+                       var encoded = null;                     \r
                        if(this.pass1.getValue() != null && this.pass1.getValue() != ""){\r
-                               var encoder = this.getEncoderCallback();\r
                                encoded = encoder(this.pass1.getValue()); \r
                        }\r
+                       if(this.getSelfEdition() && encoded && this.oldPass.getValue()!=""){\r
+                               return {oldPass:encoder(this.oldPass.getValue()), newPass:encoded};\r
+                       }\r
                        return encoded;\r
                },\r
                clear : function(){\r
                        this.pass1.setValue("");\r
-                       this.pass2.setValue("");                        \r
+                       this.pass2.setValue("");                \r
+                       if(this.getSelfEdition()){\r
+                               this.oldPass.setValue("");\r
+                       }\r
                },\r
                validate : function(){\r
                        if(this.pass1.getValue() != this.pass2.getValue()){\r
                                this.pass1.setValid(false);\r
-                               this.pass2.setValid(false); \r
-                               this.setValid(false);\r
+                               this.pass2.setValid(false);\r
+                               this.setValid(false);                           \r
                        }else{\r
                                this.pass1.setValid(true);\r
                                this.pass2.setValid(true); \r
index b2dd95d0835d39371863b77796871aa9e8624c88..0fc5bb12afe1c70c4b7586f7b8600d16598acaa7 100644 (file)
@@ -20,6 +20,9 @@ qx.Class.define("org.argeo.security.ria.components.UserEditor",
   
   properties : 
   {
+       selfEdition : {
+               init : false
+       },
        modified : {
                init : false,
                apply : "_applyDetailsModified"
@@ -95,7 +98,7 @@ qx.Class.define("org.argeo.security.ria.components.UserEditor",
                this.basicGB.add(new qx.ui.basic.Label("Roles"), {row:1,column:0});             
                this.basicGB.add(this.rolesField, {row:1,column:1});
                
-               this.passPane = new org.argeo.security.ria.components.PasswordCredentialImpl();
+               this.passPane = new org.argeo.security.ria.components.PasswordCredentialImpl(this.getSelfEdition());
                this.passGB.add(this.passPane.getContainer());
                
                //this.naturesTab.add(this.basicPage);
@@ -162,7 +165,7 @@ qx.Class.define("org.argeo.security.ria.components.UserEditor",
                        if(pass != null && !this.passPane.validate()){
                                this.error("Warning, passwords differ!");
                                return;                                 
-                       }
+                       }                       
                }
                this.passPane.clear();
                var saveCompletedCallback = qx.lang.Function.bind(function(){
@@ -171,16 +174,21 @@ qx.Class.define("org.argeo.security.ria.components.UserEditor",
                        this.setModified(false);
                        this.fireDataEvent("savedUser", user);                          
                }, this);
-               var userService = user.getSaveService();
+               var userService = user.getSaveService(this.getSelfEdition());
                userService.addListener("completed", function(response){
                        if(response.getContent().status && response.getContent().status == "ERROR"){
                                return;
                        }
                        user.load(response.getContent(), "json");
                        if(pass!=null){
-                               var passService = org.argeo.security.ria.SecurityAPI.getUpdateUserPassService(user.getName(), pass);
+                               var passService;
+                               if(!this.getSelfEdition()){
+                                       passService = org.argeo.security.ria.SecurityAPI.getUpdateUserPassService(user.getName(), pass);
+                               }else{
+                                       passService = org.argeo.security.ria.SecurityAPI.getUpdatePassService(pass.oldPass, pass.newPass);
+                               }
                                passService.addListener("completed", function(response){
-                                       if(response.getContent().status){
+                                       if(response.getContent().status != "ERROR"){
                                                this.info(response.getContent().message);
                                        }
                                        saveCompletedCallback();
index ae1dbb3eb58f3c2c9158bab47de1f58b8bb9b0db..15bd3c088acd3626e09a24a95cd26f6b01952733 100644 (file)
@@ -5,7 +5,8 @@ qx.Class.define("org.argeo.security.ria.components.UserEditorPrefPane", {
          \r
        construct : function(){\r
                this.base(arguments);\r
-               this.initGUI();\r
+               this.setSelfEdition(true);\r
+               this.initGUI();         \r
                this.basicGB.setVisibility("excluded");\r
                var saveButton = new qx.ui.form.Button("Save", "org.argeo.security.ria/document-save.png");\r
                saveButton.addListener("execute", this.saveUser, this);\r
index c3f46970d5f07dfe2571726a46fa8996f2d76d67..c5185355b3ff336152d64c8c7684ec7881ccaa42 100644 (file)
@@ -37,11 +37,11 @@ qx.Class.define("org.argeo.security.ria.model.User", {
                        this.setNatures(data.userNatures);\r
                        this.setRawData(data);\r
                },\r
-               getSaveService : function(){\r
+               getSaveService : function(self){\r
                        if(this.isCreate()){\r
                                var userService = org.argeo.security.ria.SecurityAPI.getCreateUserService(this.toJSON(true));                   \r
                        }else{\r
-                               var userService = org.argeo.security.ria.SecurityAPI.getUpdateUserService(this.toJSON());                               \r
+                               var userService = org.argeo.security.ria.SecurityAPI.getUpdateUserService(this.toJSON(), self);                         \r
                        }\r
                        userService.addListener("completed", function(response){\r
                                if(!response || !response.username) return;\r