changeset 4016:cce2d984b001

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.
author Jonathan Sternberg <jonathansternberg@gmail.com>
date Mon, 17 Jun 2013 18:09:50 -0400
parents 669721d1fe65
children 509923dac48d
files rhodecode/config/rcextensions/__init__.py rhodecode/lib/hooks.py rhodecode/model/user.py
diffstat 3 files changed, 163 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/config/rcextensions/__init__.py	Tue Jun 18 16:39:59 2013 +0200
+++ b/rhodecode/config/rcextensions/__init__.py	Mon Jun 17 18:09:50 2013 -0400
@@ -30,7 +30,7 @@
 # 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 @@
      :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 @@
      :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
 
 
 #==============================================================================
--- a/rhodecode/lib/hooks.py	Tue Jun 18 16:39:59 2013 +0200
+++ b/rhodecode/lib/hooks.py	Mon Jun 17 18:09:50 2013 -0400
@@ -252,6 +252,45 @@
     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 @@
     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:
--- a/rhodecode/model/user.py	Tue Jun 18 16:39:59 2013 +0200
+++ b/rhodecode/model/user.py	Mon Jun 17 18:09:50 2013 -0400
@@ -94,6 +94,9 @@
 
             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 @@
             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 @@
                 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 @@
                 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 @@
                     % (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