# HG changeset patch # User Jonathan Sternberg # Date 1371566269 14400 # Node ID 509923dac48d2813b2379781e94f711f2758fa69 # Parent cce2d984b001c47690f51da141f045d1858b684f Include the current user as a created_by/deleted_by attribute for USER_HOOK extensions. diff -r cce2d984b001 -r 509923dac48d rhodecode/config/rcextensions/__init__.py --- a/rhodecode/config/rcextensions/__init__.py Mon Jun 17 18:09:50 2013 -0400 +++ b/rhodecode/config/rcextensions/__init__.py Tue Jun 18 10:37:49 2013 -0400 @@ -79,6 +79,7 @@ :param password: :param emails: :param inherit_default_permissions: + :param created_by: """ return 0 CREATE_USER_HOOK = _cruserhook @@ -138,6 +139,7 @@ :param password: :param emails: :param inherit_default_permissions: + :param deleted_by: """ return 0 DELETE_USER_HOOK = _dluserhook diff -r cce2d984b001 -r 509923dac48d rhodecode/lib/hooks.py --- a/rhodecode/lib/hooks.py Mon Jun 17 18:09:50 2013 -0400 +++ b/rhodecode/lib/hooks.py Tue Jun 18 10:37:49 2013 -0400 @@ -252,7 +252,7 @@ return 0 -def log_create_user(user_dict, **kwargs): +def log_create_user(user_dict, created_by, **kwargs): """ Post create user Hook. This is a dummy function for admins to re-use if needed. It's taken from rhodecode-extensions module and executed @@ -286,7 +286,7 @@ from rhodecode import EXTENSIONS callback = getattr(EXTENSIONS, 'CREATE_USER_HOOK', None) if isfunction(callback): - return callback(**user_dict) + return callback(created_by=created_by, **user_dict) return 0 @@ -329,7 +329,7 @@ return 0 -def log_delete_user(user_dict, **kwargs): +def log_delete_user(user_dict, deleted_by, **kwargs): """ Post delete user Hook. This is a dummy function for admins to re-use if needed. It's taken from rhodecode-extensions module and executed @@ -363,7 +363,7 @@ from rhodecode import EXTENSIONS callback = getattr(EXTENSIONS, 'DELETE_USER_HOOK', None) if isfunction(callback): - return callback(**user_dict) + return callback(deleted_by=deleted_by, **user_dict) return 0 diff -r cce2d984b001 -r 509923dac48d rhodecode/model/user.py --- a/rhodecode/model/user.py Mon Jun 17 18:09:50 2013 -0400 +++ b/rhodecode/model/user.py Tue Jun 18 10:37:49 2013 -0400 @@ -33,7 +33,7 @@ from sqlalchemy.exc import DatabaseError from sqlalchemy.orm import joinedload -from rhodecode.lib.utils2 import safe_unicode, generate_api_key +from rhodecode.lib.utils2 import safe_unicode, generate_api_key, get_current_rhodecode_user from rhodecode.lib.caching_query import FromCache from rhodecode.model import BaseModel from rhodecode.model.db import User, UserRepoToPerm, Repository, Permission, \ @@ -81,7 +81,9 @@ def get_by_api_key(self, api_key, cache=False): return User.get_by_api_key(api_key, cache) - def create(self, form_data): + def create(self, form_data, cur_user=None): + if not cur_user: + cur_user = getattr(get_current_rhodecode_user(), 'username', '?') from rhodecode.lib.auth import get_crypt_password try: new_user = User() @@ -96,14 +98,14 @@ self.sa.add(new_user) from rhodecode.lib.hooks import log_create_user - log_create_user(new_user.get_dict()) + log_create_user(new_user.get_dict(), cur_user) return new_user except Exception: log.error(traceback.format_exc()) raise def create_or_update(self, username, password, email, firstname='', - lastname='', active=True, admin=False, ldap_dn=None): + lastname='', active=True, admin=False, ldap_dn=None, cur_user=None): """ Creates a new instance if not found, or updates current one @@ -117,6 +119,8 @@ :param admin: :param ldap_dn: """ + if not cur_user: + cur_user = getattr(get_current_rhodecode_user(), 'username', '?') from rhodecode.lib.auth import get_crypt_password @@ -147,19 +151,21 @@ if not edit: from rhodecode.lib.hooks import log_create_user - log_create_user(new_user.get_dict()) + log_create_user(new_user.get_dict(), cur_user) return new_user except (DatabaseError,): log.error(traceback.format_exc()) raise - def create_for_container_auth(self, username, attrs): + def create_for_container_auth(self, username, attrs, cur_user=None): """ Creates the given user if it's not already in the database :param username: :param attrs: """ + if not cur_user: + cur_user = getattr(get_current_rhodecode_user(), 'username', '?') if self.get_by_username(username, case_insensitive=True) is None: # autogenerate email for container account without one @@ -178,7 +184,7 @@ self.sa.add(new_user) from rhodecode.lib.hooks import log_create_user - log_create_user(new_user.get_dict()) + log_create_user(new_user.get_dict(), cur_user) return new_user except (DatabaseError,): log.error(traceback.format_exc()) @@ -188,7 +194,7 @@ ' for container auth.', username) return None - def create_ldap(self, username, password, user_dn, attrs): + def create_ldap(self, username, password, user_dn, attrs, cur_user=None): """ Checks if user is in database, if not creates this user marked as ldap user @@ -198,6 +204,8 @@ :param user_dn: :param attrs: """ + if not cur_user: + cur_user = getattr(get_current_rhodecode_user(), 'username', '?') from rhodecode.lib.auth import get_crypt_password log.debug('Checking for such ldap account in RhodeCode database') if self.get_by_username(username, case_insensitive=True) is None: @@ -221,7 +229,7 @@ self.sa.add(new_user) from rhodecode.lib.hooks import log_create_user - log_create_user(new_user.get_dict()) + log_create_user(new_user.get_dict(), cur_user) return new_user except (DatabaseError,): log.error(traceback.format_exc()) @@ -307,7 +315,9 @@ log.error(traceback.format_exc()) raise - def delete(self, user): + def delete(self, user, cur_user=None): + if not cur_user: + cur_user = getattr(get_current_rhodecode_user(), 'username', '?') user = self._get_user(user) try: @@ -326,7 +336,7 @@ self.sa.delete(user) from rhodecode.lib.hooks import log_delete_user - log_delete_user(user.get_dict()) + log_delete_user(user.get_dict(), cur_user) except Exception: log.error(traceback.format_exc()) raise