diff options
author | Marcin Kuzminski <marcin@python-works.com> | 2011-11-02 16:19:51 +0200 |
---|---|---|
committer | Marcin Kuzminski <marcin@python-works.com> | 2011-11-02 16:19:51 +0200 |
commit | de8e192903f5ab324a81a10b808539580dcf926c (patch) | |
tree | f3b9575aff84cb6f07a8886352987b43bf76f8c4 /rhodecode/model | |
parent | ab476443289ac238893fd20d9f23cefc59c5b206 (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-x | rhodecode/model/db.py | 21 | ||||
-rw-r--r-- | rhodecode/model/user.py | 48 |
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 |