예제 #1
0
 /**
  * Validate OAuth request
  * @param Zend_Uri_Http $url Request URL, will use current if null
  * @param array $params Additional parameters
  * @return bool
  * @throws Zend_Oauth_Exception
  */
 public function checkOAuthRequest(Zend_Uri_Http $url = null, $params = array())
 {
     if (empty($url)) {
         $this->url = $this->getRequestUrl();
     } else {
         $this->url = clone $url;
     }
     // We'll ignore query for the pruposes of URL matching
     $this->url->setQuery('');
     if (isset($_SERVER['REQUEST_METHOD'])) {
         $method = $_SERVER['REQUEST_METHOD'];
     } elseif (isset($_SERVER['HTTP_METHOD'])) {
         $method = $_SERVER['HTTP_METHOD'];
     } else {
         $method = 'GET';
     }
     $params = $this->assembleParams($method, $params);
     $this->checkSignatureMethod($params['oauth_signature_method']);
     $this->checkRequiredParams($params);
     $this->timestamp = $params['oauth_timestamp'];
     $this->nonce = $params['oauth_nonce'];
     $this->consumer_key = $params['oauth_consumer_key'];
     if (!is_callable($this->nonceHandler)) {
         throw new Zend_Oauth_Exception("Nonce handler not callable", self::BAD_NONCE);
     }
     $res = call_user_func($this->nonceHandler, $this);
     if ($res != self::OK) {
         throw new Zend_Oauth_Exception("Invalid request", $res);
     }
     if (!is_callable($this->consumerHandler)) {
         throw new Zend_Oauth_Exception("Consumer handler not callable", self::CONSUMER_KEY_UNKNOWN);
     }
     $res = call_user_func($this->consumerHandler, $this);
     // this will set $this->consumer_secret if OK
     if ($res != self::OK) {
         throw new Zend_Oauth_Exception("Consumer key invalid", $res);
     }
     if ($this->needsToken()) {
         $this->token = $params['oauth_token'];
         $this->verifier = $params['oauth_verifier'];
         if (!is_callable($this->tokenHandler)) {
             throw new Zend_Oauth_Exception("Token handler not callable", self::TOKEN_REJECTED);
         }
         $res = call_user_func($this->tokenHandler, $this);
         // this will set $this->token_secret if OK
         if ($res != self::OK) {
             throw new Zend_Oauth_Exception("Token invalid", $res);
         }
     }
     $util = new Zend_Oauth_Http_Utility();
     $req_sign = $params['oauth_signature'];
     unset($params['oauth_signature']);
     $our_sign = $util->sign($params, $params['oauth_signature_method'], $this->consumer_secret, $this->token_secret, $method, $this->url->getUri());
     if ($req_sign != $our_sign) {
         // TODO: think how to extract signature base string
         $this->problem = $our_sign;
         throw new Zend_Oauth_Exception("Invalid signature", self::INVALID_SIGNATURE);
     }
     return true;
 }
예제 #2
0
 /**
  * Call a remote REST web service URI and return the Zend_Http_Response object
  *
  * @param  string $path            The path to append to the URI
  * @throws Zend_Rest_Client_Exception
  * @return void
  */
 private function _prepareRest($path)
 {
     // Get the URI object and configure it
     if (!$this->_uri instanceof Zend_Uri_Http) {
         require_once 'Zend/Rest/Client/Exception.php';
         throw new Zend_Rest_Client_Exception('URI object must be set before performing call');
     }
     $uri = $this->_uri->getUri();
     if ($path[0] != '/' && $uri[strlen($uri) - 1] != '/') {
         $path = '/' . $path;
     }
     $this->_uri->setPath($path);
     /**
      * Get the HTTP client and configure it for the endpoint URI.  Do this each time
      * because the Zend_Http_Client instance is shared among all Zend_Service_Abstract subclasses.
      */
     if ($this->_noReset) {
         // if $_noReset we do not want to reset on this request,
         // but we do on any subsequent request
         $this->_noReset = false;
     } else {
         self::getHttpClient()->resetParameters();
     }
     self::getHttpClient()->setUri($this->_uri);
 }
예제 #3
0
 /**
  * Sets an alternative endpoint to the default
  * 
  * @param  Zend_Uri_Http $endpoint
  * @return Zend_Service_Amazon_Ses
  * @throws InvalidArgumentException If the provided endpoint url is not valid
  */
 public function setEndpoint(Zend_Uri_Http $endpoint)
 {
     $this->_endpoint = $endpoint;
     if (!$endpoint->valid()) {
         throw new InvalidArgumentException(sprintf('The provided url "%s" is not valid.', $endpoint->getUri()));
     }
     return $this;
 }
예제 #4
0
 /**
  * Call a remote REST web service URI and return the Zend_Http_Response object
  *
  * @param  string $path            The path to append to the URI
  * @throws Zend_Service_Exception
  * @return void
  */
 private final function _prepareRest($path, $query = null)
 {
     // Get the URI object and configure it
     if (!$this->_uri instanceof Zend_Uri_Http) {
         throw new Zend_Service_Exception('URI object must be set before performing call');
     }
     $uri = $this->_uri->getUri();
     if ($path[0] != '/' && $uri[strlen($uri) - 1] != '/') {
         $path = '/' . $path;
     }
     $this->_uri->setPath($path);
     if (!is_null($query)) {
         $this->_uri->setQuery($query);
     }
     /**
      * Get the HTTP client and configure it for the endpoint URI.  Do this each time
      * because the Zend_Http_Client instance is shared among all Zend_Service_Abstract subclasses.
      */
     self::getHttpClient()->setUri($this->_uri);
 }
예제 #5
0
 /**
  * Call a remote REST web service URI and return the Zend_Http_Response object
  *
  * @param  string $path            The path to append to the URI
  * @throws Zend_Rest_Client_Exception
  * @return void
  */
 private final function _prepareRest($path)
 {
     // Get the URI object and configure it
     if (!$this->_uri instanceof Zend_Uri_Http) {
         require_once 'Zend/Rest/Client/Exception.php';
         throw new Zend_Rest_Client_Exception('URI object must be set before performing call');
     }
     list($path, $query) = explode("?", $path);
     $uri = $this->_uri->getUri();
     if ($path[0] != '/') {
         $path = $this->_basepath . $path;
     }
     $this->_uri->setPath($path);
     $this->_uri->setQuery($query);
     /**
      * Get the HTTP client and configure it for the endpoint URI.  Do this each time
      * because the Zend_Http_Client instance is shared among all Zend_Service_Abstract subclasses.
      */
     self::getHttpClient()->resetParameters()->setUri($this->_uri);
 }
예제 #6
0
 /**
  * Call a remote REST web service URI and return the Zend_Http_Response object
  *
  * @param  string $path            The path to append to the URI
  * @throws Tid_Zend_REST_Json_Exception
  * @return void
  */
 protected function _prepareRequest($path)
 {
     // Get the URI object and configure it
     if (!$this->_uri instanceof Zend_Uri_Http) {
         require_once 'Tid/Zend/REST/Json/Exception.php';
         throw new Tid_Zend_REST_Json_Exception('URI object must be set before performing call');
     }
     $uri = rtrim($this->_uri->getUri(), '/') . '/' . ltrim($path, '/');
     /**
      * Get the HTTP client and configure it for the endpoint URI.  Do this
      * each time because the Zend_Http_Client instance is shared among all
      * Zend_Service_Abstract subclasses.
      */
     self::getHttpClient()->resetParameters()->setUri($uri);
 }
예제 #7
0
 /**
  * Checks if the given pattern matches the last requested uri.
  *
  * @param string $pattern
  * @return boolean
  */
 protected function matches($pattern)
 {
     if (empty($pattern)) {
         return false;
     }
     $uri = $this->requestedUri->getUri();
     return preg_match($this->toRegExp($pattern), $uri) > 0;
 }