Source for file Message.php

Documentation is available at Message.php

  1. <?php
  2. /**
  3.  * OpenID_Message
  4.  * 
  5.  * PHP Version 5.2.0+
  6.  * 
  7.  * @category  Auth
  8.  * @package   OpenID
  9.  * @author    Bill Shupp <hostmaster@shupp.org>
  10.  * @copyright 2009 Bill Shupp
  11.  * @license   http://www.opensource.org/licenses/bsd-license.php FreeBSD
  12.  * @link      http://pearopenid.googlecode.com
  13.  */
  14.  
  15. /**
  16.  * Required files
  17.  */
  18. require_once 'OpenID.php';
  19. require_once 'OpenID/Message/Exception.php';
  20.  
  21. /**
  22.  * OpenID_Message
  23.  * 
  24.  * A class that handles any OpenID protocol messages, as described in section 4.1 of
  25.  * the {@link http://openid.net/specs/openid-authentication-2_0.html#anchor4}
  26.  * OpenID 2.0 spec}.  You can set or get messages in one of 3 formats:  Key Value
  27.  * (KV), Array, or HTTP.  KV is described in the spec (4.1.1 of the 2.0 spec), HTTP
  28.  * is urlencoded key value pairs, as you would see them in a query string or an HTTP
  29.  * POST body.
  30.  * 
  31.  * @category  Auth
  32.  * @package   OpenID
  33.  * @author    Bill Shupp <hostmaster@shupp.org>
  34.  * @copyright 2009 Bill Shupp
  35.  * @license   http://www.opensource.org/licenses/bsd-license.php FreeBSD
  36.  * @link      http://pearopenid.googlecode.com
  37.  */
  38. {
  39.     const FORMAT_KV    'KV';
  40.     const FORMAT_HTTP  'HTTP';
  41.     const FORMAT_ARRAY 'ARRAY';
  42.  
  43.     protected $validFormats = array(self::FORMAT_KV,
  44.                                     self::FORMAT_HTTP,
  45.                                     self::FORMAT_ARRAY);
  46.  
  47.     protected $data = array();
  48.  
  49.     /**
  50.      * Optionally instanciates this object with the contents of an OpenID message.
  51.      * 
  52.      * @param mixed  $message Message contents
  53.      * @param string $format  Source message format (KV, HTTP, or ARRAY)
  54.      * 
  55.      * @return void 
  56.      */
  57.     public function __construct($message null$format self::FORMAT_ARRAY)
  58.     {
  59.         if ($message !== null{
  60.             $this->setMessage($message$format);
  61.         }
  62.     }
  63.  
  64.     /**
  65.      * Gets the value of any key in this message.
  66.      * 
  67.      * @param string $name Name of key
  68.      * 
  69.      * @return mixed Value of key if set, defaults to null
  70.      */
  71.     public function get($name)
  72.     {
  73.         if (isset($this->data[$name])) {
  74.             return $this->data[$name];
  75.         }
  76.         return null;
  77.     }
  78.  
  79.     /**
  80.      * Sets a message key value.
  81.      * 
  82.      * @param string $name Key name
  83.      * @param mixed  $val  Key value
  84.      * 
  85.      * @return void 
  86.      */
  87.     public function set($name$val)
  88.     {
  89.         if ($name == 'openid.ns' && $val != OpenID::NS_2_0{
  90.             throw new OpenID_Message_Exception('Invalid openid.ns value: ' $val);
  91.         }
  92.         $this->data[$name$val;
  93.     }
  94.  
  95.     /**
  96.      * Deletes a key from a message
  97.      * 
  98.      * @param string $name Key name
  99.      * 
  100.      * @return void 
  101.      */
  102.     public function delete($name)
  103.     {
  104.         unset($this->data[$name]);
  105.     }
  106.  
  107.     /**
  108.      * Gets the current message in KV format
  109.      * 
  110.      * @return string 
  111.      * @see getMessage()
  112.      */
  113.     public function getKVFormat()
  114.     {
  115.         return $this->getMessage(self::FORMAT_KV);
  116.     }
  117.  
  118.     /**
  119.      * Gets the current message in HTTP (url encoded) format
  120.      * 
  121.      * @return string 
  122.      * @see getMessage()
  123.      */
  124.     public function getHTTPFormat()
  125.     {
  126.         return $this->getMessage(self::FORMAT_HTTP);
  127.     }
  128.  
  129.     /**
  130.      * Gets the current message in ARRAY format
  131.      * 
  132.      * @return array 
  133.      * @see getMessage()
  134.      */
  135.     public function getArrayFormat()
  136.     {
  137.         return $this->getMessage(self::FORMAT_ARRAY);
  138.     }
  139.  
  140.     /**
  141.      * Gets the message in one of three formats:
  142.      * 
  143.      *  OpenID_Message::FORMAT_ARRAY (default)
  144.      *  OpenID_Message::FORMAT_KV (KV pairs, OpenID response format)
  145.      *  OpenID_Message::FORMAT_HTTP (url encoded pairs, for use in a query string)
  146.      * 
  147.      * @param string $format One of the above three formats
  148.      * 
  149.      * @throws OpenID_Message_Exception When passed an invalid format argument
  150.      * @return mixed array, kv string, or url query string paramters
  151.      */
  152.     public function getMessage($format self::FORMAT_ARRAY)
  153.     {
  154.         if ($format === self::FORMAT_ARRAY{
  155.             return $this->data;
  156.         }
  157.  
  158.         if ($format === self::FORMAT_HTTP{
  159.             foreach ($this->data as $k => $v{
  160.                 $pairs[urlencode($k'=' urlencode($v);
  161.             }
  162.             return implode('&'$pairs);
  163.         }
  164.  
  165.         if ($format === self::FORMAT_KV{
  166.             $message '';
  167.             foreach ($this->data as $k => $v{
  168.                 $message .= "$k:$v\n";
  169.             }
  170.             return $message;
  171.         }
  172.  
  173.         throw new OpenID_Message_Exception('Invalid format: ' $format);
  174.     }
  175.  
  176.     /**
  177.      * Sets message contents.  Wipes out any existing message contents.  Default
  178.      * source format is Array, but you can also use KV and HTTP formats.
  179.      * 
  180.      * @param mixed $message Source message
  181.      * @param mixed $format  Source message format (OpenID_Message::FORMAT_KV,
  182.      *                                               OpenID_Message::FORMAT_ARRAY,
  183.      *                                               OpenID_Message::FORMAT_HTTP)
  184.      * 
  185.      * @return void 
  186.      */
  187.     public function setMessage($message$format self::FORMAT_ARRAY)
  188.     {
  189.         if (!in_array($format$this->validFormats)) {
  190.             throw new OpenID_Message_Exception('Invalid format: ' $format);
  191.         }
  192.  
  193.         // Flush current data
  194.         $this->data = array();
  195.  
  196.         if ($format == self::FORMAT_ARRAY{
  197.             foreach ($message as $k => $v{
  198.                 $this->set($k$v);
  199.             }
  200.             return;
  201.         }
  202.  
  203.         if ($format == self::FORMAT_KV{
  204.             $lines explode("\n"$message);
  205.             foreach ($lines as $line{
  206.                 if ($line != ''{
  207.                         list($key$valueexplode(':'$line2);
  208.                         $this->set($key$value);
  209.                 }
  210.             }
  211.             return;
  212.         }
  213.  
  214.         if ($format == self::FORMAT_HTTP{
  215.             $array explode('&'$message);
  216.             foreach ($array as $pair{
  217.                 list($key$valueexplode('='$pair2);
  218.                 $this->set(urldecode($key)urldecode($value));
  219.             }
  220.         }
  221.     }
  222.  
  223.     /**
  224.      * Adds an extension to an OpenID_Message object.
  225.      * 
  226.      * @param OpenID_Extension $extension Instance of OpenID_Extension
  227.      * 
  228.      * @see OpenID_Extension
  229.      * @return void 
  230.      */
  231.     public function addExtension(OpenID_Extension $extension)
  232.     {
  233.         $extension->toMessage($this);
  234.     }
  235. }
  236. ?>

Documentation generated on Tue, 15 Dec 2009 19:00:55 -0800 by phpDocumentor 1.4.3