diff rhodecode/model/user.py @ 1634:1d904d972c47 beta

User usermodel instead of db model to manage accounts - initial refactoring of models to handle rhodecode+api
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 02 Nov 2011 16:19:51 +0200
parents 2c0d35e336b5
children f522f4d3bf93
line wrap: on
line diff
--- a/rhodecode/model/user.py	Wed Nov 02 03:08:33 2011 +0200
+++ b/rhodecode/model/user.py	Wed Nov 02 16:19:51 2011 +0200
@@ -92,6 +92,54 @@
             self.sa.rollback()
             raise
 
+
+    def create_or_update(self, username, password, email, name, lastname, 
+                         active=True, admin=False, ldap_dn=None):
+        """
+        Creates a new instance if not found, or updates current one
+        
+        :param username:
+        :param password:
+        :param email:
+        :param active:
+        :param name:
+        :param lastname:
+        :param active:
+        :param admin:
+        :param ldap_dn:
+        """
+        
+        from rhodecode.lib.auth import get_crypt_password
+        
+        log.debug('Checking for %s account in RhodeCode database', username)
+        user = User.get_by_username(username, case_insensitive=True)
+        if user is None:
+            log.debug('creating new user %s', username)            
+            new_user = User()
+        else:
+            log.debug('updating user %s', username)            
+            new_user = user
+            
+        try:
+            new_user.username = username
+            new_user.admin = admin
+            new_user.password = get_crypt_password(password)
+            new_user.api_key = generate_api_key(username)
+            new_user.email = email
+            new_user.active = active
+            new_user.ldap_dn = safe_unicode(ldap_dn) if ldap_dn else None
+            new_user.name = name
+            new_user.lastname = lastname
+
+            self.sa.add(new_user)
+            self.sa.commit()
+            return new_user
+        except (DatabaseError,):
+            log.error(traceback.format_exc())
+            self.sa.rollback()
+            raise
+    
+    
     def create_for_container_auth(self, username, attrs):
         """
         Creates the given user if it's not already in the database