diff --git a/rhodecode/config/rcextensions/__init__.py b/rhodecode/config/rcextensions/__init__.py --- a/rhodecode/config/rcextensions/__init__.py +++ b/rhodecode/config/rcextensions/__init__.py @@ -30,7 +30,7 @@ EXTRA_INDEX_EXTENSIONS = [] # POST CREATE REPOSITORY HOOK #============================================================================== # this function will be executed after each repository is created -def _crhook(*args, **kwargs): +def _crrepohook(*args, **kwargs): """ Post create repository HOOK kwargs available: @@ -49,16 +49,48 @@ def _crhook(*args, **kwargs): :param created_by: """ return 0 -CREATE_REPO_HOOK = _crhook +CREATE_REPO_HOOK = _crrepohook + + +#============================================================================== +# POST CREATE USER HOOK +#============================================================================== +# this function will be executed after each user is created +def _cruserhook(*args, **kwargs): + """ + Post create user HOOK + kwargs available: + :param username: + :param full_name_or_username: + :param full_contact: + :param user_id: + :param name: + :param firstname: + :param short_contact: + :param admin: + :param lastname: + :param ip_addresses: + :param ldap_dn: + :param email: + :param api_key: + :param last_login: + :param full_name: + :param active: + :param password: + :param emails: + :param inherit_default_permissions: + """ + return 0 +CREATE_USER_HOOK = _cruserhook #============================================================================== # POST DELETE REPOSITORY HOOK #============================================================================== # this function will be executed after each repository deletion -def _dlhook(*args, **kwargs): +def _dlrepohook(*args, **kwargs): """ - Post create repository HOOK + Post delete repository HOOK kwargs available: :param repo_name: :param repo_type: @@ -76,7 +108,39 @@ def _dlhook(*args, **kwargs): :param deleted_on: """ return 0 -DELETE_REPO_HOOK = _dlhook +DELETE_REPO_HOOK = _dlrepohook + + +#============================================================================== +# POST DELETE USER HOOK +#============================================================================== +# this function will be executed after each user is deleted +def _dluserhook(*args, **kwargs): + """ + Post delete user HOOK + kwargs available: + :param username: + :param full_name_or_username: + :param full_contact: + :param user_id: + :param name: + :param firstname: + :param short_contact: + :param admin: + :param lastname: + :param ip_addresses: + :param ldap_dn: + :param email: + :param api_key: + :param last_login: + :param full_name: + :param active: + :param password: + :param emails: + :param inherit_default_permissions: + """ + return 0 +DELETE_USER_HOOK = _dluserhook #============================================================================== diff --git a/rhodecode/lib/hooks.py b/rhodecode/lib/hooks.py --- a/rhodecode/lib/hooks.py +++ b/rhodecode/lib/hooks.py @@ -252,6 +252,45 @@ def log_create_repository(repository_dic return 0 +def log_create_user(user_dict, **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 + if present + + :param user_dict: dict dump of user object + + available keys for user_dict: + + 'username', + 'full_name_or_username', + 'full_contact', + 'user_id', + 'name', + 'firstname', + 'short_contact', + 'admin', + 'lastname', + 'ip_addresses', + 'ldap_dn', + 'email', + 'api_key', + 'last_login', + 'full_name', + 'active', + 'password', + 'emails', + 'inherit_default_permissions' + + """ + from rhodecode import EXTENSIONS + callback = getattr(EXTENSIONS, 'CREATE_USER_HOOK', None) + if isfunction(callback): + return callback(**user_dict) + + return 0 + + def log_delete_repository(repository_dict, deleted_by, **kwargs): """ Post delete repository Hook. This is a dummy function for admins to re-use @@ -290,6 +329,45 @@ def log_delete_repository(repository_dic return 0 +def log_delete_user(user_dict, **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 + if present + + :param user_dict: dict dump of user object + + available keys for user_dict: + + 'username', + 'full_name_or_username', + 'full_contact', + 'user_id', + 'name', + 'firstname', + 'short_contact', + 'admin', + 'lastname', + 'ip_addresses', + 'ldap_dn', + 'email', + 'api_key', + 'last_login', + 'full_name', + 'active', + 'password', + 'emails', + 'inherit_default_permissions' + + """ + from rhodecode import EXTENSIONS + callback = getattr(EXTENSIONS, 'DELETE_USER_HOOK', None) + if isfunction(callback): + return callback(**user_dict) + + return 0 + + handle_git_pre_receive = (lambda repo_path, revs, env: handle_git_receive(repo_path, revs, env, hook_type='pre')) handle_git_post_receive = (lambda repo_path, revs, env: diff --git a/rhodecode/model/user.py b/rhodecode/model/user.py --- a/rhodecode/model/user.py +++ b/rhodecode/model/user.py @@ -94,6 +94,9 @@ class UserModel(BaseModel): new_user.api_key = generate_api_key(form_data['username']) self.sa.add(new_user) + + from rhodecode.lib.hooks import log_create_user + log_create_user(new_user.get_dict()) return new_user except Exception: log.error(traceback.format_exc()) @@ -141,6 +144,10 @@ class UserModel(BaseModel): new_user.name = firstname new_user.lastname = lastname self.sa.add(new_user) + + if not edit: + from rhodecode.lib.hooks import log_create_user + log_create_user(new_user.get_dict()) return new_user except (DatabaseError,): log.error(traceback.format_exc()) @@ -169,6 +176,9 @@ class UserModel(BaseModel): new_user.lastname = attrs['lastname'] self.sa.add(new_user) + + from rhodecode.lib.hooks import log_create_user + log_create_user(new_user.get_dict()) return new_user except (DatabaseError,): log.error(traceback.format_exc()) @@ -209,6 +219,9 @@ class UserModel(BaseModel): new_user.lastname = attrs['lastname'] self.sa.add(new_user) + + from rhodecode.lib.hooks import log_create_user + log_create_user(new_user.get_dict()) return new_user except (DatabaseError,): log.error(traceback.format_exc()) @@ -311,6 +324,9 @@ class UserModel(BaseModel): % (user.username, len(repos), ', '.join(repos)) ) self.sa.delete(user) + + from rhodecode.lib.hooks import log_delete_user + log_delete_user(user.get_dict()) except Exception: log.error(traceback.format_exc()) raise