Use global injector binder to get Token object using Horde token config
authorMichael M Slusarz <slusarz@curecanti.org>
Wed, 17 Mar 2010 22:54:51 +0000 (16:54 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Wed, 17 Mar 2010 22:54:51 +0000 (16:54 -0600)
framework/Core/lib/Horde/Core/Binder/Token.php [new file with mode: 0644]
framework/Core/lib/Horde/Registry.php
framework/Core/package.xml
framework/Form/Form.php
framework/Model/lib/Horde/Form.php
framework/Token/lib/Horde/Token.php
framework/Token/lib/Horde/Token/Sql.php
framework/Token/package.xml
imp/compose.php

diff --git a/framework/Core/lib/Horde/Core/Binder/Token.php b/framework/Core/lib/Horde/Core/Binder/Token.php
new file mode 100644 (file)
index 0000000..5772a5e
--- /dev/null
@@ -0,0 +1,18 @@
+<?php
+class Horde_Core_Binder_Token implements Horde_Injector_Binder
+{
+    public function create(Horde_Injector $injector)
+    {
+        $token = isset($GLOBALS['conf']['token'])
+            ? Horde_Token::singleton($conf['token']['driver'], Horde::getDriverConfig('token', $conf['token']['driver']))
+            : Horde_Token::singleton('file');
+        $token->setLogger($injector->getInstance('Horde_Log_Logger'));
+
+        return $token;
+    }
+
+    public function equals(Horde_Injector_Binder $binder)
+    {
+        return false;
+    }
+}
index b5e6d42..20438bd 100644 (file)
@@ -241,6 +241,7 @@ class Horde_Registry
             'Horde_Notification' => new Horde_Core_Binder_Notification(),
             'Horde_Perms' => new Horde_Core_Binder_Perms(),
             'Horde_Template' => new Horde_Core_Binder_Template(),
+            'Horde_Token' => new Horde_Core_Binder_Token(),
             'Horde_Vfs' => new Horde_Core_Binder_Vfs(),
             'Net_DNS_Resolver' => new Horde_Core_Binder_Dns()
         );
index c706220..d470e1e 100644 (file)
@@ -72,6 +72,7 @@ Application Framework.
        <file name="Notification.php" role="php" />
        <file name="Perms.php" role="php" />
        <file name="Template.php" role="php" />
+       <file name="Token.php" role="php" />
        <file name="Vfs.php" role="php" />
       </dir> <!-- /lib/Horde/Core/Binder -->
       <dir name="Factory">
@@ -200,6 +201,7 @@ Application Framework.
    <install name="lib/Horde/Core/Binder/Notification.php" as="Horde/Core/Binder/Notification.php" />
    <install name="lib/Horde/Core/Binder/Perms.php" as="Horde/Core/Binder/Perms.php" />
    <install name="lib/Horde/Core/Binder/Template.php" as="Horde/Core/Binder/Template.php" />
+   <install name="lib/Horde/Core/Binder/Token.php" as="Horde/Core/Binder/Token.php" />
    <install name="lib/Horde/Core/Binder/Vfs.php" as="Horde/Core/Binder/Vfs.php" />
    <install name="lib/Horde/Core/Factory/KolabServer.php" as="Horde/Core/Factory/KolabServer.php" />
    <install name="lib/Horde/Core/Factory/KolabSession.php" as="Horde/Core/Factory/KolabSession.php" />
index b17d967..0d374b7 100644 (file)
@@ -412,7 +412,6 @@ class Horde_Form {
         }
 
         if ($this->_useFormToken) {
-            require_once 'Horde/Token.php';
             $token = Horde_Token::generateId($this->_name);
             $_SESSION['horde_form_secrets'][$token] = true;
             $this->_preserveVarByPost($this->_name . '_formToken', $token);
@@ -473,7 +472,6 @@ class Horde_Form {
         }
 
         if ($this->_useFormToken) {
-            require_once 'Horde/Token.php';
             $token = Horde_Token::generateId($this->_name);
             $_SESSION['horde_form_secrets'][$token] = true;
             $this->_preserveVarByPost($this->_name . '_formToken', $token);
@@ -531,7 +529,6 @@ class Horde_Form {
     function preserve($vars)
     {
         if ($this->_useFormToken) {
-            require_once 'Horde/Token.php';
             $token = Horde_Token::generateId($this->_name);
             $_SESSION['horde_form_secrets'][$token] = true;
             $this->_preserveVarByPost($this->_name . '_formToken', $token);
@@ -612,15 +609,7 @@ class Horde_Form {
         $this->_autofilled = true;
 
         if ($this->_useFormToken) {
-            global $conf;
-            require_once 'Horde/Token.php';
-            if (isset($conf['token'])) {
-                /* If there is a configured token system, set it up. */
-                $tokenSource = &Horde_Token::singleton($conf['token']['driver'], Horde::getDriverConfig('token', $conf['token']['driver']));
-            } else {
-                /* Default to the file system if no config. */
-                $tokenSource = &Horde_Token::singleton('file');
-            }
+            $tokenSource = $GLOBALS['injector']->getInstance('Horde_Token');
             $passedToken = $vars->get($this->_name . '_formToken');
             if (!empty($passedToken) && !$tokenSource->verify($passedToken)) {
                 $this->_errors['_formToken'] = _("This form has already been processed.");
index bccd710..4ba9b04 100644 (file)
@@ -370,14 +370,7 @@ class Horde_Form {
         $this->_autofilled = true;
 
         if ($this->_useFormToken) {
-            global $conf;
-            if (isset($conf['token'])) {
-                /* If there is a configured token system, set it up. */
-                $tokenSource = Horde_Token::factory($conf['token']['driver'], Horde::getDriverConfig('token', $conf['token']['driver']));
-            } else {
-                /* Default to the file system if no config. */
-                $tokenSource = Horde_Token::factory('file');
-            }
+            $tokenSource = $GLOBALS['injector']->getInstance('Horde_Token');
             if (!$tokenSource->verify($this->_vars->get($this->_name . '_formToken'))) {
                 $this->_errors['_formToken'] = _("This form has already been processed.");
             }
index 88353c8..2bc92d0 100644 (file)
@@ -23,6 +23,13 @@ class Horde_Token
     static protected $_instances = array();
 
     /**
+     * Logger.
+     *
+     * @var Horde_Log_Logger
+     */
+    protected $_logger;
+
+    /**
      * Hash of parameters necessary to use the chosen backend.
      *
      * @var array
@@ -49,7 +56,7 @@ class Horde_Token
 
         $driver = basename($driver);
         $class = __CLASS__;
-        if ($driver == 'none') {
+        if ($driver != 'none') {
             $class .= '_' . ucfirst($driver);
         }
 
@@ -99,9 +106,19 @@ class Horde_Token
 
     /**
      * Constructor.
+     *
+     * @param array $params  Configuration parameters:
+     * <pre>
+     * 'logger' - (Horde_Log_Logger) A logger object.
+     * </pre>
      */
     protected function __construct($params)
     {
+        if (isset($params['logger'])) {
+            $this->_logger = $params['logger'];
+            unset($params['logger']);
+        }
+
         $this->_params = $params;
     }
 
@@ -116,18 +133,6 @@ class Horde_Token
     }
 
     /**
-     * Generates a connection id and returns it.
-     *
-     * @param string $seed  A unique ID to be included in the token.
-     *
-     * @return string  The generated id string.
-     */
-    public function generateId($seed = '')
-    {
-        return Horde_Url::uriB64Encode(pack('H*', sha1(uniqid(mt_rand(), true) . $seed . (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''))));
-    }
-
-    /**
      * Checks if the given token has been previously used. First
      * purges all expired tokens. Then retrieves current tokens for
      * the given ip address. If the specified token was not found,
@@ -184,4 +189,16 @@ class Horde_Token
     {
     }
 
+    /**
+     * Generates a connection id and returns it.
+     *
+     * @param string $seed  A unique ID to be included in the token.
+     *
+     * @return string  The generated id string.
+     */
+    static public function generateId($seed = '')
+    {
+        return Horde_Url::uriB64Encode(pack('H*', sha1(uniqid(mt_rand(), true) . $seed . (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''))));
+    }
+
 }
index 7d91d15..bb19223 100644 (file)
@@ -105,7 +105,9 @@ class Horde_Token_Sql extends Horde_Token
         /* Return an error if the update fails. */
         $result = $this->_write_db->query($query, $values);
         if ($result instanceof PEAR_Error) {
-            Horde::logMessage($result, 'ERR');
+            if ($this->_logger) {
+                $this->_logger->log($result, 'ERR');
+            }
             throw new Horde_Exception_Prior($result);
         }
     }
@@ -131,7 +133,9 @@ class Horde_Token_Sql extends Horde_Token
 
         $result = $this->_db->getOne($query, $values);
         if ($result instanceof PEAR_Error) {
-            Horde::logMessage($result, 'ERR');
+            if ($this->_logger) {
+                $this->_logger->log($result, 'ERR');
+            }
             return false;
         } else {
             return !empty($result);
@@ -156,7 +160,9 @@ class Horde_Token_Sql extends Horde_Token
 
         $result = $this->_write_db->query($query, $values);
         if ($result instanceof PEAR_Error) {
-            Horde::logMessage($result, 'ERR');
+            if ($this->_logger) {
+                $this->_logger->log($result, 'ERR');
+            }
             throw new Horde_Exception_Prior($result);
         }
     }
index eeb2143..117c69a 100644 (file)
@@ -63,6 +63,12 @@ http://pear.php.net/dtd/package-2.0.xsd">
     <channel>pear.horde.org</channel>
    </package>
   </required>
+  <optional>
+   <package>
+    <name>Log</name>
+    <channel>pear.horde.org</channel>
+   </package>
+  </optional>
  </dependencies>
  <phprelease>
   <filelist>
index 5352406..0a3ceb9 100644 (file)
@@ -80,9 +80,7 @@ $uid = $vars->uid;
 
 /* Check for duplicate submits. */
 if ($vars->compose_formToken) {
-    $tokenSource = isset($conf['token'])
-        ? Horde_Token::factory($conf['token']['driver'], Horde::getDriverConfig('token', $conf['token']['driver']))
-        : Horde_Token::factory('file');
+    $tokenSource = $injector->getInstance('Horde_Token');
 
     try {
         if (!$tokenSource->verify($vars->compose_formToken)) {