changeset 3809:647fb653048e beta

make the password optional in API calls
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 06 May 2013 23:35:29 +0200
parents 2feb58495f34
children 13b7e04af99b
files docs/api/api.rst rhodecode/controllers/api/api.py rhodecode/model/user.py rhodecode/tests/api/api_base.py
diffstat 4 files changed, 26 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/docs/api/api.rst	Mon May 06 16:34:02 2013 +0200
+++ b/docs/api/api.rst	Mon May 06 23:35:29 2013 +0200
@@ -212,13 +212,13 @@
 OUTPUT::
 
     id : <id_given_in_input>
-    result : {  
+    result : {
                  "repo": "<reponame>",
                  "locked": "<bool true|false>",
                  "locked_since": "<float lock_time>",
                  "locked_by": "<username>",
                  "msg": "User `<username>` set lock state for repo `<reponame>` to `<false|true>`"
-             }               
+             }
     error :  null
 
 
@@ -354,7 +354,7 @@
     args :    {
                 "username" :  "<username>",
                 "email" :     "<useremail>",
-                "password" :  "<password>",
+                "password" :  "<password = Optional(None)>",
                 "firstname" : "<firstname> = Optional(None)",
                 "lastname" :  "<lastname> = Optional(None)",
                 "active" :    "<bool> = Optional(True)",
--- a/rhodecode/controllers/api/api.py	Mon May 06 16:34:02 2013 +0200
+++ b/rhodecode/controllers/api/api.py	Mon May 06 23:35:29 2013 +0200
@@ -407,7 +407,7 @@
         return result
 
     @HasPermissionAllDecorator('hg.admin')
-    def create_user(self, apiuser, username, email, password,
+    def create_user(self, apiuser, username, email, password=Optional(None),
                     firstname=Optional(None), lastname=Optional(None),
                     active=Optional(True), admin=Optional(False),
                     ldap_dn=Optional(None)):
--- a/rhodecode/model/user.py	Mon May 06 16:34:02 2013 +0200
+++ b/rhodecode/model/user.py	Mon May 06 23:35:29 2013 +0200
@@ -133,7 +133,7 @@
             new_user.admin = admin
             # set password only if creating an user or password is changed
             if not edit or user.password != password:
-                new_user.password = get_crypt_password(password)
+                new_user.password = get_crypt_password(password) if password else None
                 new_user.api_key = generate_api_key(username)
             new_user.email = email
             new_user.active = active
--- a/rhodecode/tests/api/api_base.py	Mon May 06 16:34:02 2013 +0200
+++ b/rhodecode/tests/api/api_base.py	Mon May 06 23:35:29 2013 +0200
@@ -477,6 +477,27 @@
         UserModel().delete(usr.user_id)
         Session().commit()
 
+    def test_api_create_user_without_password(self):
+        username = 'test_new_api_user_passwordless'
+        email = username + "@foo.com"
+
+        id_, params = _build_data(self.apikey, 'create_user',
+                                  username=username,
+                                  email=email)
+        response = api_call(self, params)
+
+        usr = UserModel().get_by_username(username)
+        ret = dict(
+            msg='created new user `%s`' % username,
+            user=jsonify(usr.get_api_data())
+        )
+
+        expected = ret
+        self._compare_ok(id_, expected, given=response.body)
+
+        UserModel().delete(usr.user_id)
+        Session().commit()
+
     @mock.patch.object(UserModel, 'create_or_update', crash)
     def test_api_create_user_when_exception_happened(self):