Password impl, various enhancements
authorCharles du Jeu <charles.dujeu@gmail.com>
Mon, 21 Sep 2009 09:01:38 +0000 (09:01 +0000)
committerCharles du Jeu <charles.dujeu@gmail.com>
Mon, 21 Sep 2009 09:01:38 +0000 (09:01 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@2994 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/RolesApplet.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/UserEditorApplet.js
security/runtime/org.argeo.security.ria/src/argeo-ria-lib/security/class/org/argeo/security/ria/UsersApplet.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/model/User.js

index 7b124b92811847fcbbf770f816ed861acfce39e2..429460b3700d2258910ad6b3ed3f57bed0da3de7 100644 (file)
@@ -28,6 +28,18 @@ qx.Class.define("org.argeo.security.ria.RolesApplet",
         */
        commands : {
                init : {
+                       "reload" : {
+                               label           : "Reload Data",
+                               icon            : "org.argeo.security.ria/view-refresh.png",
+                               shortcut        : "Control+h",
+                               enabled         : true,
+                               menu            : "Roles",
+                               toolbar         : "roles",
+                               callback        : function(e){
+                                       this.loadRolesList();
+                               },
+                               command         : null
+                       },                      
                        "new_role" : {
                                label           : "Create Role", 
                                icon            : "org.argeo.security.ria/list-add.png",
@@ -232,7 +244,13 @@ qx.Class.define("org.argeo.security.ria.RolesApplet",
                                viewSel.removeListener("changeSelection", this.monitorChooserSelectionChanges, this);                   
                        }
                        selectionModel.addListener("changeSelection", this.selectionToFilter, this);
+                       if(selectionModel.getSelectedCount()){
+                               var orig = selectionModel.getSelectedRanges()[0].minIndex;
+                       }
                        selectionModel.setSelectionMode(qx.ui.table.selection.Model.MULTIPLE_INTERVAL_SELECTION_TOGGLE);
+                       if(orig){
+                               selectionModel.addSelectionInterval(orig, orig);
+                       }
                        this.selectionToFilter();                       
                }else if(guiMode == "edit"){
                        if(!this.usersAppletReference) return;
@@ -253,7 +271,13 @@ qx.Class.define("org.argeo.security.ria.RolesApplet",
                        }
                        this.table.setEnabled(true);
                        selectionModel.removeListener("changeSelection", this.selectionToFilter, this);
+                       if(selectionModel.getSelectedCount()){
+                               var orig = selectionModel.getSelectedRanges()[0].minIndex;
+                       }
                        selectionModel.setSelectionMode(qx.ui.table.selection.Model.SINGLE_SELECTION);                          
+                       if(orig){
+                               selectionModel.addSelectionInterval(orig, orig);
+                       }
                }
        },
        
index e85b5241093f7c40f1660940160fe230539d3f74..f7fad1df4f3ebc991cdc65837bcb2c8bb0dd0049 100644 (file)
@@ -139,8 +139,14 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
        rolesList : {
                
        },
-       instanceId : {init:""},
-       instanceLabel : {init:"Editor"},
+       instanceId : {
+               init:"",
+               event : "changeInstanceId"
+       },
+       instanceLabel : {
+               init:"Editor",
+               event : "changeInstanceLabel"
+       },
        loaded : {
                init : false
        },
@@ -259,10 +265,15 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                }else{
                        user.setRoles([]);
                }
-               user.setPassword(this.passPane.getData());
                
                // GO TO AND RETURN FROM SERVER
                if(user.isCreate()){
+                       if(!this.passPane.validate()){
+                               this.error("Warning, passwords differ!");
+                               return;
+                       }
+                       user.setPassword(this.passPane.getData());
+                       var create = true;
                        var userExists = false;
                        var req = org.argeo.security.ria.SecurityAPI.getUserExistsService(user.getName());
                        req.addListener("completed", function(response){
@@ -274,20 +285,45 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                                this.error("User already exists, choose another name!");
                                return;
                        }
+               }else{
+                       var pass = this.passPane.getData();
+                       if(pass != null && !this.passPane.validate()){
+                               this.error("Warning, passwords differ!");
+                               return;                                 
+                       }
                }
-               var userService = user.getSaveService();
-               userService.send();
-               userService.addListener("completed", function(response){
-                       if(response.getContent().status && response.getContent().status == "ERROR"){
-                               return;
+               this.passPane.clear();
+               var saveCompletedCallback = qx.lang.Function.bind(function(){
+                       if(create){
+                               this.setInstanceLabel("User " + user.getName());
+                               this.setInstanceId(user.getName());
                        }
                        this._setGuiInCreateMode(false);
-                       user.load(response.getContent(), "json");
                        this.partialRefreshUser(user, ["details","natures"]);
                        this.setModified(false);
                        this.getViewSelection().triggerEvent();
-                       this.fireDataEvent("savedUser", user);
+                       this.fireDataEvent("savedUser", user);                          
                }, this);
+               var userService = user.getSaveService();
+               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);
+                               passService.addListener("completed", function(response){
+                                       if(response.getContent().status){
+                                               this.info(response.getContent().message);
+                                       }
+                                       saveCompletedCallback();
+                               }, this);
+                               passService.send();
+                       }else{
+                               saveCompletedCallback();
+                       }
+               }, this);               
+               userService.send();
        },
        
        _addNatureTab : function(natureClass, natureData, select){
index 988e178b7503f58a02c1ec1a30b8c75709a656b6..7f0c55335b3f3e54284daea95310122342621458 100644 (file)
@@ -28,18 +28,6 @@ qx.Class.define("org.argeo.security.ria.UsersApplet",
         */
        commands : {
                init : {
-                       "load_users" : {
-                               label           : "Reload Users",
-                               icon            : "org.argeo.security.ria/view-refresh.png",
-                               shortcut        : "Control+h",
-                               enabled         : true,
-                               menu            : "Users",
-                               toolbar         : "users",
-                               callback        : function(e){
-                                       this.loadUsersList();
-                               },
-                               command         : null
-                       },
                        "new_user" : {
                                label           : "New User", 
                                icon            : "org.argeo.security.ria/list-add.png",
index 610e56d12e7837d0b8d004e93d77d18187e39f02..238cc7ef106d6e1be77eaa5ebfd90a1f52535a1a 100644 (file)
@@ -7,6 +7,13 @@ qx.Class.define("org.argeo.security.ria.components.PasswordCredentialImpl", {
        properties : {\r
                valid : {\r
                        init : false\r
+               },\r
+               encoderCallback : {\r
+                       init : function(string){\r
+                               var encoderShort = org.argeo.ria.util.Encoder;\r
+                               return "{SHA}"+encoderShort.base64Encode(encoderShort.hexDecode(encoderShort.hash(string, "sha1")));\r
+                       },\r
+                       check : "Function"\r
                }\r
        },\r
        \r
@@ -28,15 +35,26 @@ qx.Class.define("org.argeo.security.ria.components.PasswordCredentialImpl", {
                getContainer  : function(){\r
                        return this;\r
                },\r
-               getData    : function(format){return true;},\r
+               getData : function(format){\r
+                       var encoded = null;\r
+                       if(this.pass1.getValue() != ""){\r
+                               var encoder = this.getEncoderCallback();\r
+                               encoded = encoder(this.pass1.getValue()); \r
+                       }\r
+                       return encoded;\r
+               },\r
+               clear : function(){\r
+                       this.pass1.setValue("");\r
+                       this.pass2.setValue("");                        \r
+               },\r
                validate : function(){\r
-                       if(this.pass1.getValue() == this.pass2.getValue()){\r
-                               this.setValid(true);\r
-                       }else{\r
+                       if(this.pass1.getValue() != this.pass2.getValue() || this.pass1.getValue() == ""){\r
                                // TODO WHEN TESTING 0.8.3\r
                                //this.pass1.setValid(false);\r
                                //this.pass2.setValid(false); \r
                                this.setValid(false);\r
+                       }else{\r
+                               this.setValid(true);\r
                        }\r
                        return this.getValid();\r
                },\r
index 64ba63e4c898c95c3b13854e6b5b8dde06cfc807..c3f46970d5f07dfe2571726a46fa8996f2d76d67 100644 (file)
@@ -5,6 +5,10 @@ qx.Class.define("org.argeo.security.ria.model.User", {
                        init : "",\r
                        check : "String"\r
                },\r
+               password : {\r
+                       nullable : true,\r
+                       check : "String"\r
+               },\r
                roles : {\r
                        check : "Array"\r
                },\r
@@ -23,7 +27,7 @@ qx.Class.define("org.argeo.security.ria.model.User", {
                this.base(arguments);\r
                this.setRoles([]);\r
                this.setNatures([]);\r
-               this.setRawData({"password":"{SHA}ieSV55Qc+eQOaYDRSha/AjzNTJE="});\r
+               this.setRawData({password:null});\r
        },\r
        members : {\r
                load : function(data, format){\r
@@ -35,7 +39,7 @@ qx.Class.define("org.argeo.security.ria.model.User", {
                },\r
                getSaveService : function(){\r
                        if(this.isCreate()){\r
-                               var userService = org.argeo.security.ria.SecurityAPI.getCreateUserService(this.toJSON());                       \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
                        }\r
@@ -45,11 +49,12 @@ qx.Class.define("org.argeo.security.ria.model.User", {
                        }, this);\r
                        return userService;                     \r
                },\r
-               toJSON : function(){\r
+               toJSON : function(create){\r
                        var rawData = this.getRawData();\r
                        rawData.username = this.getName();\r
                        rawData.roles = this.getRoles();\r
                        rawData.userNatures = this.getNatures();\r
+                       if(create) rawData.password = this.getPassword();\r
                        return rawData;\r
                },\r
                _getNatureByType : function(natureType){\r