Changeset - cce2d984b001
[Not reviewed]
default
0 3 0
Jonathan Sternberg - 12 years ago 2013-06-18 00:09:50
jonathansternberg@gmail.com
Grafted from: a6fb9d5e64d0
User create/delete hooks for rcextensions.

When a user is created or deleted, the CREATE_USER_HOOK or DELETE_USER_HOOK
are called as part of the log_create_user and log_delete_user functions
respectively. This is similar to the existing log_create_repository and
log_delete_repository functions that already exist as part of the rcextensions
module.
3 files changed with 163 insertions and 5 deletions:
0 comments (0 inline, 0 general)
rhodecode/config/rcextensions/__init__.py
Show inline comments
 
@@ -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
 

	
 

	
 
#==============================================================================
rhodecode/lib/hooks.py
Show inline comments
 
@@ -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:
rhodecode/model/user.py
Show inline comments
 
@@ -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
0 comments (0 inline, 0 general)