Source for file Request.php

Documentation is available at Request.php

  1. <?php
  2. /**
  3.  * OpenID_Auth_Request
  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 'Net/URL2.php';
  19. require_once 'OpenID.php';
  20. require_once 'OpenID/Auth/Exception.php';
  21. require_once 'OpenID/Message.php';
  22. require_once 'OpenID/Nonce.php';
  23.  
  24. /**
  25.  * Creates an OpenID authorization request of type "checkid_setup" or
  26.  * "checkid_immediate".
  27.  * 
  28.  * Example:
  29.  * <code>
  30.  * // First perform discovery on the user supplied identifier
  31.  * $discover = new OpenID_Discover($identifier);
  32.  * $discover->discover();
  33.  * 
  34.  * // Optionally get association (from cache in this example)
  35.  * $opEndpointURL = array_shift($discover->services[0]->getURIs());
  36.  * $assocHandle   = OpenID::getStore()->getAssociation($opEndpointURL)->assocHandle;
  37.  * 
  38.  * // Now create the auth request object
  39.  * $auth = new OpenID_Auth_Request($discover,     // OpenID_Discover object
  40.  *                                 $returnTo,     // openid.return_to
  41.  *                                 $realm,        // openid.realm
  42.  *                                 $assocHandle); // openid.assoc_handle
  43.  * 
  44.  * // Optionally add an extension
  45.  *  $sreg = new OpenID_Extension_SREG11(OpenID_Extension::REQUEST);
  46.  *  $sreg->set('required', 'email');
  47.  *  $sreg->set('optional', 'nickname,gender,dob');
  48.  *
  49.  *  // Add it to an existing instance of OpenID_Auth_Request
  50.  *  $auth->addExtension($sreg);
  51.  * 
  52.  * // Optionally make this a checkid_immediate request
  53.  * $auth->setMode(OpenID::MODE_CHECKID_IMMEDIATE);
  54.  * 
  55.  * // Send user to the OP
  56.  * header('Location: ' . $auth->getAuthorizeURL());
  57.  * </code>
  58.  * 
  59.  * @category  Auth
  60.  * @package   OpenID
  61.  * @author    Bill Shupp <hostmaster@shupp.org>
  62.  * @copyright 2009 Bill Shupp
  63.  * @license   http://www.opensource.org/licenses/bsd-license.php FreeBSD
  64.  * @link      http://pearopenid.googlecode.com
  65.  */
  66. {
  67.     /**
  68.      * The normalized identifier
  69.      * 
  70.      * @var string 
  71.      */
  72.     protected $identifier = null;
  73.  
  74.     /**
  75.      * The request message
  76.      * 
  77.      * @var OpenID_Message 
  78.      */
  79.     protected $message = null;
  80.  
  81.     /**
  82.      * The OP Endpoint we are communicating with
  83.      * 
  84.      * @var OpenID_ServiceEndpoint 
  85.      */
  86.     protected $serviceEndpoint = null;
  87.  
  88.     /**
  89.      * Nonce class in case we are in 1.1 mode and need to embed it in the return_to
  90.      * 
  91.      * @var OpenID_Nonce 
  92.      */
  93.     protected $nonce = null;
  94.  
  95.  
  96.     /**
  97.      * Sets the basic information used in the message.
  98.      * 
  99.      * @param OpenID_Discover $discover    Discover object
  100.      * @param string          $returnTo    The return_to URL
  101.      * @param string          $realm       The realm
  102.      * @param string          $assocHandle The optional association handle
  103.      * 
  104.      * @return void 
  105.      */
  106.     public function __construct(OpenID_Discover $discover,
  107.                                 $returnTo,
  108.                                 $realm,
  109.                                 $assocHandle null)
  110.     {
  111.         $this->identifier      = $discover->identifier;
  112.         $this->serviceEndpoint = $discover->services[0];
  113.         $this->message         = new OpenID_Message();
  114.  
  115.         // Only set NS for 2.0
  116.         $versionFromMap OpenID::$versionMap[$this->serviceEndpoint->getVersion()];
  117.         if ($versionFromMap == OpenID::NS_2_0{
  118.             $this->message->set('openid.ns'$versionFromMap);
  119.         }
  120.         $this->message->set('openid.return_to'$returnTo);
  121.         $this->message->set('openid.realm'$realm);
  122.  
  123.         if (!empty($assocHandle)) {
  124.             $this->message->set('openid.assoc_handle'$assocHandle);
  125.         }
  126.  
  127.         // Default to checkid_setup
  128.         $this->setMode(OpenID::MODE_CHECKID_SETUP);
  129.     }
  130.  
  131.     /**
  132.      * Adds an extension to the message.
  133.      * 
  134.      * @param OpenID_Extension $extension Extension instance
  135.      * 
  136.      * @return void 
  137.      */
  138.     public function addExtension(OpenID_Extension $extension)
  139.     {
  140.         $this->message->addExtension($extension);
  141.     }
  142.  
  143.     /**
  144.      * Sets the openid.mode parameter.  Can be either "checkid_setup" or
  145.      * "checkid_immediate"
  146.      * 
  147.      * @param mixed $mode Value for 'openid.mode'
  148.      * 
  149.      * @throws OpenID_Auth_Exception on an invalid mode
  150.      * @return void 
  151.      */
  152.     public function setMode($mode)
  153.     {
  154.         switch ($mode{
  155.         case OpenID::MODE_CHECKID_SETUP:
  156.         case OpenID::MODE_CHECKID_IMMEDIATE:
  157.             $this->message->set('openid.mode'$mode);
  158.             break;
  159.         default:
  160.             throw new OpenID_Auth_Exception(
  161.                 'Invalid openid.mode: ' $mode
  162.             );
  163.         }
  164.     }
  165.  
  166.     /**
  167.      * Gets the current openid.mode value
  168.      * 
  169.      * @return string 
  170.      */
  171.     public function getMode()
  172.     {
  173.         return $this->message->get('openid.mode');
  174.     }
  175.  
  176.     /**
  177.      * Gets the auth request message in a URL format suitable for redirection.  The
  178.      * decision about whether to use directed identity or not id done here.
  179.      * 
  180.      * @return string The URL to redirect the User-Agent to
  181.      */
  182.     public function getAuthorizeURL()
  183.     {
  184.         $version OpenID::$versionMap[$this->serviceEndpoint->getVersion()];
  185.  
  186.         if ($this->serviceEndpoint->getVersion(== OpenID::SERVICE_2_0_SERVER{
  187.             $this->message->set('openid.claimed_id'OpenID::NS_2_0_ID_SELECT);
  188.             $this->message->set('openid.identity'OpenID::NS_2_0_ID_SELECT);
  189.         else {
  190.             $localID $this->serviceEndpoint->getLocalID();
  191.             if (!empty($localID)) {
  192.                 if ($version == OpenID::NS_2_0{
  193.                     $this->message->set('openid.claimed_id'$this->identifier);
  194.                 }
  195.                 $this->message->set('openid.identity'$localID);
  196.             else {
  197.                 if ($version == OpenID::NS_2_0{
  198.                     $this->message->set('openid.claimed_id'$this->identifier);
  199.                 }
  200.                 $this->message->set('openid.identity'$this->identifier);
  201.             }
  202.         }
  203.  
  204.         if ($version == OpenID::NS_1_1{
  205.             $this->addNonce();
  206.         }
  207.  
  208.         $urls   $this->serviceEndpoint->getURIs();
  209.         $url    $urls[0'?' $this->message->getHTTPFormat();
  210.         $netURL new Net_URL2($url);
  211.  
  212.         return $netURL->getURL();
  213.     }
  214.  
  215.     /**
  216.      * Sets the instance of OpenID_Nonce for use with 1.1 return_to nonces
  217.      * 
  218.      * @param OpenID_Nonce $nonce Custom instance of OpenID_Nonce
  219.      * 
  220.      * @return void 
  221.      */
  222.     public function setNonce(OpenID_Nonce $nonce)
  223.     {
  224.         $this->nonce = $nonce;
  225.     }
  226.  
  227.     /**
  228.      * Gets the OpenID_Nonce instance if set, otherwise instantiates one.
  229.      * 
  230.      * @return OpenID_Nonce 
  231.      */
  232.     protected function getNonce()
  233.     {
  234.         if ($this->nonce instanceof OpenID_Nonce{
  235.             return $this->nonce;
  236.         }
  237.         return new OpenID_Nonce(array_shift($this->serviceEndpoint->getURIs()));
  238.     }
  239.  
  240.     /**
  241.      * Adds a nonce to the openid.return_to URL parameter.  Only used in OpenID 1.1
  242.      * 
  243.      * @return void 
  244.      */
  245.     protected function addNonce()
  246.     {
  247.         $nonce       $this->getNonce()->createNonceAndStore();
  248.         $returnToURL new Net_URL2($this->message->get('openid.return_to'));
  249.         $returnToURL->setQueryVariable(OpenID_Nonce::RETURN_TO_NONCE,
  250.                                        urlencode($nonce));
  251.  
  252.         $this->message->set('openid.return_to'$returnToURL->getURL());
  253.  
  254.         // Observing
  255.         $logMessage  "Nonce: $nonce\n";
  256.         $logMessage  'New ReturnTo: ' $returnToURL->getURL("\n";
  257.         $logMessage .= 'OP URIs: ' print_r($this->serviceEndpoint->getURIs(),
  258.                                              true);
  259.         OpenID::setLastEvent(__METHOD__$logMessage);
  260.     }
  261. }
  262. ?>

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