permissions.php
changeset 51 508400fc5282
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/permissions.php	Tue Jan 20 22:08:07 2009 -0500
@@ -0,0 +1,72 @@
+<?php
+
+function check_permissions($nick, $params, $quiet = true)
+{
+  global $permissions, $irc;
+  
+  // I have all the power.
+  if ( $nick === $GLOBALS['nick'] )
+  {
+    if ( defined('LIBIRC_DEBUG') )
+      echo "[!!!] Granted action {$params['context']} to {$GLOBALS['nick']} (self)\n";
+    return true;
+  }
+  
+  // Is the user in the permissions table?
+  if ( !isset($permissions[$nick]) )
+  {
+    if ( defined('LIBIRC_DEBUG') )
+      echo "[!!!] Denied action {$params['context']} to {$nick} (not in table)\n";
+    return false;
+  }
+  
+  // Make sure the user is identified
+  $whois = $irc->whois($nick);
+  if ( !$whois || ( $whois && !$whois['identified']) )
+  {
+    if ( defined('LIBIRC_DEBUG') )
+      echo "[!!!] Denied action {$params['context']} to {$nick} (whois check failed)\n";
+    if ( !$quiet )
+      $irc->privmsg($nick, "Please identify to services before you do that. (If you are already identified, wait 20 seconds for the whois cache to clear and try again)");
+    return false;
+  }
+  
+  // Is the user an admin?
+  if ( in_array('admin', $permissions[$nick]) && $params['context'] !== 'alert' )
+  {
+    if ( defined('LIBIRC_DEBUG') )
+      echo "[!!!] Granted action {$params['context']} to {$nick} (has admin rights)\n";
+    return true;
+  }
+  
+  switch($params['context']):
+    case 'channel':
+      if ( isset($permissions[$nick]['channel']) && is_array($permissions[$nick]['channel']) )
+      {
+        if ( in_array($params['channel'], $permissions[$nick]['channel']) )
+        {
+          if ( defined('LIBIRC_DEBUG') )
+            echo "[!!!] Granted action {$params['context']} to {$nick} in channel {$params['channel']} (on channel whitelist)\n";
+          return true;
+        }
+      }
+      if ( defined('LIBIRC_DEBUG') )
+        echo "[!!!] Denied action {$params['context']} to {$nick} in channel {$params['channel']} (not on channel whitelist)\n";
+      return false;
+    default:
+      eval(eb_fetch_hook('permission_check'));
+      if ( isset($result) )
+      {
+        $perm = $result ? 'Granted' : 'Denied';
+        if ( defined('LIBIRC_DEBUG') )
+          echo "[!!!] $perm action {$params['context']} to {$nick} (plugin overridden)\n";
+        return $result;
+      }
+      $result = in_array($params['context'], $permissions[$nick]);
+      $perm = $result ? 'Granted' : 'Denied';
+      if ( defined('LIBIRC_DEBUG') )
+        echo "[!!!] $perm action {$params['context']} to {$nick} (default handler)\n";
+      return $result;
+  endswitch;
+}
+