]> jfr.im git - irc/quakenet/newserv.git/commitdiff
CHANSERV: Added various hooks to Q commands (mainly for achievement
authorsplidge <redacted>
Thu, 11 Mar 2010 18:42:15 +0000 (18:42 +0000)
committersplidge <redacted>
Thu, 11 Mar 2010 18:42:15 +0000 (18:42 +0000)
purposes).

--HG--
branch : achievements

chanserv/authcmds/auth.c
chanserv/authcmds/newpass.c
chanserv/chancmds/chanlev.c
chanserv/chanservuser.c
chanserv/usercmds/whois.c
core/hooks.h

index 47d7554b34259fc0b240bd2fac12fe0396fb2150..78cf6e5aeb88f32334f7f7c73f03d1dc9c2af309 100644 (file)
@@ -82,9 +82,10 @@ int csa_auth(void *source, int cargc, char **cargv, CRAlgorithm alg) {
 
 int csa_completeauth(nick *sender, reguser *rup, char *authtype) {
   int toomanyauths=0;
-  time_t now;
+  time_t now, oldlastauth;
   char userhost[USERLEN+HOSTLEN+2];
   nick *onp;
+  void *args[2];
   authname *anp;
 
   /* This should never fail but do something other than crashing if it does. */
@@ -136,6 +137,8 @@ int csa_completeauth(nick *sender, reguser *rup, char *authtype) {
   }
   
   /* Guarantee a unique auth timestamp for each account */
+  oldlastauth=rup->lastauth;
+  
   if (rup->lastauth < now) 
     rup->lastauth=now;
   else
@@ -154,6 +157,10 @@ int csa_completeauth(nick *sender, reguser *rup, char *authtype) {
 
   chanservstdmessage(sender, QM_AUTHOK, rup->username);
 
+  args[0]=sender;
+  args[1]=(void *)oldlastauth;
+  triggerhook(HOOK_CHANSERV_AUTH, args);
+
   return CMD_OK;
 }
 
index b3c79c48bb04a54746b29dd989c462d11fb54a96..69e78f2d7cf7c58b1970a124d96b4feb87f5d590 100644 (file)
@@ -22,6 +22,7 @@
 #include "../chanserv.h"
 #include "../authlib.h"
 #include "../../lib/irc_string.h"
+#include "../../core/hooks.h"
 #include <stdio.h>
 #include <string.h>
 #include <ctype.h>
@@ -30,6 +31,7 @@ int csa_donewpw(void *source, int cargc, char **cargv) {
   reguser *rup;
   nick *sender=source;
   int i, cntweak = 0, cntdigits = 0, cntletters = 0;
+  unsigned int same=0;
   time_t t;
 
   if (cargc<3) {
@@ -58,6 +60,11 @@ int csa_donewpw(void *source, int cargc, char **cargv) {
     return CMD_ERROR;
   }
 
+  if (!strcmp(cargv[0],cargv[1])) {
+    /* If they are the same then continue anyway but don't send the hook later. */
+    same=1;
+  }
+
   for ( i = 0; cargv[1][i] && i < PASSLEN; i++ ) {
     if ( cargv[1][i] == cargv[1][i+1] || cargv[1][i] + 1 == cargv[1][i+1] || cargv[1][i] - 1 == cargv[1][i+1] )
       cntweak++;
@@ -104,6 +111,9 @@ int csa_donewpw(void *source, int cargc, char **cargv) {
 
   csdb_updateuser(rup);
   csdb_createmail(rup, QMAIL_NEWPW);
+  
+  if (!same)
+    triggerhook(HOOK_CHANSERV_PWCHANGE, sender);
 
   return CMD_OK;
 }
index 559e05145b632cde2c809cd81d5882c0a06532af..e5c73f23a47cdd602a8a2319354d4ac366f2cb9e 100644 (file)
@@ -101,6 +101,7 @@ int csc_dochanlev(void *source, int cargc, char **cargv) {
   int i,j;
   int newuser=0;
   int usercount;
+  void *args[2];
 
   if (cargc<1) {
     chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "chanlev");
@@ -242,6 +243,8 @@ int csc_dochanlev(void *source, int cargc, char **cargv) {
     } else {
       chanservstdmessage(sender, QM_NOUSERSONCHANLEV, cip->name->content);
     }
+    
+    triggerhook(HOOK_CHANSERV_CHANLEVDUMP, sender);
 
     free(rusers);
   } else {
@@ -346,6 +349,12 @@ int csc_dochanlev(void *source, int cargc, char **cargv) {
             flagbuf,printflags(rcuplist->flags,rcuflags));
       csdb_chanlevhistory_insert(rcp, sender, rcuplist->user, oldflags, rcuplist->flags);
 
+      args[0]=sender;
+      args[1]=rcuplist;
+      args[2]=(void *)oldflags;
+      
+      triggerhook(HOOK_CHANSERV_CHANLEVMOD, args);
+
       /* Now see what we do next */
       if (rcuplist->flags) {
        /* User still valid: update or create */
index 7bbcd692cba9db674825e34a35c6591349837bbc..d3a1a31eb166513f90a1062c92470c23129848b2 100644 (file)
@@ -182,6 +182,8 @@ void chanservuserhandler(nick *target, int message, void **params) {
       }
       
       cmd->handler((void *)sender, cargc-1, &(cargv[1]));
+      
+      triggerhook(HOOK_CHANSERV_CMD, sender);
     }
     break;
 
index 90ae5334d182bb6e0eb828b828a46e894decb8d3..7726a00fc34d6126ee173d5d9fb1f6ef4b90f300 100644 (file)
@@ -225,5 +225,11 @@ int csu_dowhois(void *source, int cargc, char **cargv) {
 
   chanservstdmessage(sender, QM_ENDOFLIST);
 
+  if (rup==target) {
+    triggerhook(HOOK_CHANSERV_WHOAMI, sender);
+  } else {
+    triggerhook(HOOK_CHANSERV_WHOIS, sender);
+  }
+
   return CMD_OK;
 }
index ced5f689f7507c8451a42b6417645f3e80445047..4841116e137f12ffe46b67769afd3e3bb4a616c3 100644 (file)
 /* 501 spare for now */
 #define HOOK_CHANSERV_RUNNING      502 /* No arg */
 
+#define HOOK_CHANSERV_AUTH         503 /* Argument is void*[2] (nick *, lastauth) */
+#define HOOK_CHANSERV_PWCHANGE     504 /* Argument is nick * */
+#define HOOK_CHANSERV_CHANLEVMOD   505 /* Argument is void*[3] (nick *, regchanuser *, oldflags) */
+#define HOOK_CHANSERV_CHANLEVDUMP  506 /* Argument is nick * */
+#define HOOK_CHANSERV_WHOIS        507 /* Argument is nick * */
+#define HOOK_CHANSERV_WHOAMI       508 /* Argument is nick * */
+#define HOOK_CHANSERV_CMD          509 /* Argument is nick * */
+
 #define HOOK_CONTROL_REGISTERED    600 /* Argument is nick* */
 #define HOOK_CONTROL_WHOISREQUEST  601 /* Argument is nick* */
 #define HOOK_CONTROL_WHOISREPLY    602 /* Argument is char* */