aboutsummaryrefslogtreecommitdiff
path: root/rhodecode/model
diff options
context:
space:
mode:
authorMarcin Kuzminski <marcin@python-works.com>2011-11-02 16:19:51 +0200
committerMarcin Kuzminski <marcin@python-works.com>2011-11-02 16:19:51 +0200
commitde8e192903f5ab324a81a10b808539580dcf926c (patch)
treef3b9575aff84cb6f07a8886352987b43bf76f8c4 /rhodecode/model
parentab476443289ac238893fd20d9f23cefc59c5b206 (diff)
User usermodel instead of db model to manage accounts
- initial refactoring of models to handle rhodecode+api --HG-- branch : beta
Diffstat (limited to 'rhodecode/model')
-rwxr-xr-xrhodecode/model/db.py21
-rw-r--r--rhodecode/model/user.py48
2 files changed, 49 insertions, 20 deletions
diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py
index 2a13de7c..ad39c8b3 100755
--- a/rhodecode/model/db.py
+++ b/rhodecode/model/db.py
@@ -30,6 +30,7 @@ import traceback
from datetime import date
from sqlalchemy import *
+from sqlalchemy.exc import DatabaseError
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import relationship, joinedload, class_mapper, validates
from beaker.cache import cache_region, region_invalidate
@@ -322,26 +323,6 @@ class User(Base, BaseModel):
Session.commit()
log.debug('updated user %s lastlogin', self.username)
- @classmethod
- def create(cls, form_data):
- from rhodecode.lib.auth import get_crypt_password
-
- try:
- new_user = cls()
- for k, v in form_data.items():
- if k == 'password':
- v = get_crypt_password(v)
- setattr(new_user, k, v)
-
- new_user.api_key = generate_api_key(form_data['username'])
- Session.add(new_user)
- Session.commit()
- return new_user
- except:
- log.error(traceback.format_exc())
- Session.rollback()
- raise
-
class UserLog(Base, BaseModel):
__tablename__ = 'user_logs'
__table_args__ = {'extend_existing':True}
diff --git a/rhodecode/model/user.py b/rhodecode/model/user.py
index 5c2184ea..2d4f17a5 100644
--- a/rhodecode/model/user.py
+++ b/rhodecode/model/user.py
@@ -92,6 +92,54 @@ class UserModel(BaseModel):
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