<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Oauth
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Config.php 24594 2012-01-05 21:27:01Z matthew $
*/
/** Zend_Oauth */
require_once 'Zend/Oauth.php';
/** Zend_Uri */
require_once 'Zend/Uri.php';
/** Zend_Oauth_Config_Interface */
require_once 'Zend/Oauth/Config/ConfigInterface.php';
/**
* @category Zend
* @package Zend_Oauth
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
class Zend_Oauth_Config implements Zend_Oauth_Config_ConfigInterface
{
/**
* Signature method used when signing all parameters for an HTTP request
*
* @var string
*/
protected $_signatureMethod = 'HMAC-SHA1';
/**
* Three request schemes are defined by OAuth, of which passing
* all OAuth parameters by Header is preferred. The other two are
* POST Body and Query String.
*
* @var string
*/
protected $_requestScheme = Zend_Oauth::REQUEST_SCHEME_HEADER;
/**
* Preferred request Method - one of GET or POST - which Zend_Oauth
* will enforce as standard throughout the library. Generally a default
* of POST works fine unless a Provider specifically requires otherwise.
*
* @var string
*/
protected $_requestMethod = Zend_Oauth::POST;
/**
* OAuth Version; This defaults to 1.0 - Must not be changed!
*
* @var string
*/
protected $_version = '1.0';
/**
* This optional value is used to define where the user is redirected to
* after authorizing a Request Token from an OAuth Providers website.
* It's optional since a Provider may ask for this to be defined in advance
* when registering a new application for a Consumer Key.
*
* @var string
*/
protected $_callbackUrl = null;
/**
* The URL root to append default OAuth endpoint paths.
*
* @var string
*/
protected $_siteUrl = null;
/**
* The URL to which requests for a Request Token should be directed.
* When absent, assumed siteUrl+'/request_token'
*
* @var string
*/
protected $_requestTokenUrl = null;
/**
* The URL to which requests for an Access Token should be directed.
* When absent, assumed siteUrl+'/access_token'
*
* @var string
*/
protected $_accessTokenUrl = null;
/**
* The URL to which users should be redirected to authorize a Request Token.
* When absent, assumed siteUrl+'/authorize'
*
* @var string
*/
protected $_authorizeUrl = null;
/**
* An OAuth application's Consumer Key.
*
* @var string
*/
protected $_consumerKey = null;
/**
* Every Consumer Key has a Consumer Secret unless you're in RSA-land.
*
* @var string
*/
protected $_consumerSecret = null;
/**
* If relevant, a PEM encoded RSA private key encapsulated as a
* Zend_Crypt_Rsa Key
*
* @var Zend_Crypt_Rsa_Key_Private
*/
protected $_rsaPrivateKey = null;
/**
* If relevant, a PEM encoded RSA public key encapsulated as a
* Zend_Crypt_Rsa Key
*
* @var Zend_Crypt_Rsa_Key_Public
*/
protected $_rsaPublicKey = null;
/**
* Generally this will nearly always be an Access Token represented as a
* Zend_Oauth_Token_Access object.
*
* @var Zend_Oauth_Token
*/
protected $_token = null;
/**
* Define the OAuth realm
*
* @var string
*/
protected $_realm = null;
/**
* Constructor; create a new object with an optional array|Zend_Config
* instance containing initialising options.
*
* @param array|Zend_Config $options
* @return void
*/
public function __construct($options = null)
{
if ($options !== null) {
if ($options instanceof Zend_Config) {
$options = $options->toArray();
}
$this->setOptions($options);
}
}
/**
* Parse option array or Zend_Config instance and setup options using their
* relevant mutators.
*
* @param array|Zend_Config $options
* @return Zend_Oauth_Config
*/
public function setOptions(array $options)
{
foreach ($options as $key => $value) {
switch ($key) {
case 'consumerKey':
$this->setConsumerKey($value);
break;
case 'consumerSecret':
$this->setConsumerSecret($value);
break;
case 'signatureMethod':
$this->setSignatureMethod($value);
break;
case 'version':
$this->setVersion($value);
break;
case 'callbackUrl':
$this->setCallbackUrl($value);
break;
case 'siteUrl':
$this->setSiteUrl($value);
break;
case 'requestTokenUrl':
$this->setRequestTokenUrl($value);
break;
case 'accessTokenUrl':
$this->setAccessTokenUrl($value);
break;
case 'userAuthorizationUrl':
$this->setUserAuthorizationUrl($value);
break;
case 'authorizeUrl':
$this->setAuthorizeUrl($value);
break;
case 'requestMethod':
$this->setRequestMethod($value);
break;
case 'rsaPrivateKey':
$this->setRsaPrivateKey($value);
break;
case 'rsaPublicKey':
$this->setRsaPublicKey($value);
break;
case 'realm':
$this->setRealm($value);
break;
}
}
if (isset($options['requestScheme'])) {
$this->setRequestScheme($options['requestScheme']);
}
return $this;
}
/**
* Set consumer key
*
* @param string $key
* @return Zend_Oauth_Config
*/
public function setConsumerKey($key)
{
$this->_consumerKey = $key;
return $this;
}
/**
* Get consumer key
*
* @return string
*/
public function getConsumerKey()
{
return $this->_consumerKey;
}
/**
* Set consumer secret
*
* @param string $secret
* @return Zend_Oauth_Config
*/
public function setConsumerSecret($secret)
{
$this->_consumerSecret = $secret;
return $this;
}
/**
* Get consumer secret
*
* Returns RSA private key if set; otherwise, returns any previously set
* consumer secret.
*
* @return string
*/
public function getConsumerSecret()
{
if ($this->_rsaPrivateKey !== null) {
return $this->_rsaPrivateKey;
}
return $this->_consumerSecret;
}
/**
* Set signature method
*
* @param string $method
* @return Zend_Oauth_Config
* @throws Zend_Oauth_Exception if unsupported signature method specified
*/
public function setSignatureMethod($method)
{
$method = strtoupper($method);
if (!in_array($method, array(
'HMAC-SHA1', 'HMAC-SHA256', 'RSA-SHA1', 'PLAINTEXT'
))
) {
require_once 'Zend/Oauth/Exception.php';
throw new Zend_Oauth_Exception('Unsupported signature method: '
. $method
. '. Supported are HMAC-SHA1, RSA-SHA1, PLAINTEXT and HMAC-SHA256');
}
$this->_signatureMethod = $method;;
return $this;
}
/**
* Get signature method
*
* @return string
*/
public function getSignatureMethod()
{
return $this->_signatureMethod;
}
/**
* Set request scheme
*
* @param string $scheme
* @return Zend_Oauth_Config
* @throws Zend_Oauth_Exception if invalid scheme specified, or if POSTBODY set when request method of GET is specified
*/
public function setRequestScheme($scheme)
{
$scheme = strtolower($scheme);
if (!in_array($scheme, array(
Zend_Oauth::REQUEST_SCHEME_HEADER,
Zend_Oauth::REQUEST_SCHEME_POSTBODY,
Zend_Oauth::REQUEST_SCHEME_QUERYSTRING,
))
) {
require_once 'Zend/Oauth/Exception.php';
throw new Zend_Oauth_Exception(
'\'' . $scheme . '\' is an unsupported request scheme'
);
}
if ($scheme == Zend_Oauth::REQUEST_SCHEME_POSTBODY
&& $this->getRequestMethod() == Zend_Oauth::GET
) {
require_once 'Zend/Oauth/Exception.php';
throw new Zend_Oauth_Exception(
'Cannot set POSTBODY request method if HTTP method set to GET'
);
}
$this->_requestScheme = $scheme;
return $this;
}
/**
* Get request scheme
*
* @return string
*/
public function getRequestScheme()
{
return $this->_requestScheme;
}
/**
* Set version
*
* @param string $version
* @return Zend_Oauth_Config
*/
public function setVersion($version)
{
$this->_version = $version;
return $this;
}
/**
* Get version
*
* @return string
*/
public function getVersion()
{
return $this->_version;
}
/**
* Set callback URL
*
* @param string $url
* @return Zend_Oauth_Config
* @throws Zend_Oauth_Exception for invalid URLs
*/
public function setCallbackUrl($url)
{
if (!Zend_Uri::check($url) && $url !== 'oob') {
require_once 'Zend/Oauth/Exception.php';
throw new Zend_Oauth_Exception(
'\'' . $url . '\' is not a valid URI'
);
}
$this->_callbackUrl = $url;
return $this;
}
/**
* Get callback URL
*
* @return string
*/
public function getCallbackUrl()
{
return $this->_callbackUrl;
}
/**
* Set site URL
*
* @param string $url
* @return Zend_Oauth_Config
* @throws Zend_Oauth_Exception for invalid URLs
*/
public function setSiteUrl($url)
{
if (!Zend_Uri::check($url)) {
require_once 'Zend/Oauth/Exception.php';
throw new Zend_Oauth_Exception(
'\'' . $url . '\' is not a valid URI'
);
}
$this->_siteUrl = $url;
return $this;
}
/**
* Get site URL
*
* @return string
*/
public function getSiteUrl()
{
return $this->_siteUrl;
}
/**
* Set request token URL
*
* @param string $url
* @return Zend_Oauth_Config
* @throws Zend_Oauth_Exception for invalid URLs
*/
public function setRequestTokenUrl($url)
{
if (!Zend_Uri::check($url)) {
require_once 'Zend/Oauth/Exception.php';
throw new Zend_Oauth_Exception(
'\'' . $url . '\' is not a valid URI'
);
}
$this->_requestTokenUrl = rtrim($url, '/');
return $this;
}
/**
* Get request token URL
*
* If no request token URL has been set, but a site URL has, returns the
* site URL with the string "/request_token" appended.
*
* @return string
*/
public function getRequestTokenUrl()
{
if (!$this->_requestTokenUrl && $this->_siteUrl) {
return $this->_siteUrl . '/request_token';
}
return $this->_requestTokenUrl;
}
/**
* Set access token URL
*
* @param string $url
* @return Zend_Oauth_Config
* @throws Zend_Oauth_Exception for invalid URLs
*/
public function setAccessTokenUrl($url)
{
if (!Zend_Uri::check($url)) {
require_once 'Zend/Oauth/Exception.php';
throw new Zend_Oauth_Exception(
'\'' . $url . '\' is not a valid URI'
);
}
$this->_accessTokenUrl = rtrim($url, '/');
return $this;
}
/**
* Get access token URL
*
* If no access token URL has been set, but a site URL has, returns the
* site URL with the string "/access_token" appended.
*
* @return string
*/
public function getAccessTokenUrl()
{
if (!$this->_accessTokenUrl && $this->_siteUrl) {
return $this->_siteUrl . '/access_token';
}
return $this->_accessTokenUrl;
}
/**
* Set user authorization URL
*
* @param string $url
* @return Zend_Oauth_Config
* @throws Zend_Oauth_Exception for invalid URLs
*/
public function setUserAuthorizationUrl($url)
{
return $this->setAuthorizeUrl($url);
}
/**
* Set authorization URL
*
* @param string $url
* @return Zend_Oauth_Config
* @throws Zend_Oauth_Exception for invalid URLs
*/
public function setAuthorizeUrl($url)
{
if (!Zend_Uri::check($url)) {
require_once 'Zend/Oauth/Exception.php';
throw new Zend_Oauth_Exception(
'\'' . $url . '\' is not a valid URI'
);
}
$this->_authorizeUrl = rtrim($url, '/');
return $this;
}
/**
* Get user authorization URL
*
* @return string
*/
public function getUserAuthorizationUrl()
{
return $this->getAuthorizeUrl();
}
/**
* Get authorization URL
*
* If no authorization URL has been set, but a site URL has, returns the
* site URL with the string "/authorize" appended.
*
* @return string
*/
public function getAuthorizeUrl()
{
if (!$this->_authorizeUrl && $this->_siteUrl) {
return $this->_siteUrl . '/authorize';
}
return $this->_authorizeUrl;
}
/**
* Set request method
*
* @param string $method
* @return Zend_Oauth_Config
* @throws Zend_Oauth_Exception for invalid request methods
*/
public function setRequestMethod($method)
{
$method = strtoupper($method);
if (!in_array($method, array(
Zend_Oauth::GET,
Zend_Oauth::POST,
Zend_Oauth::PUT,
Zend_Oauth::DELETE,
))
) {
require_once 'Zend/Oauth/Exception.php';
throw new Zend_Oauth_Exception('Invalid method: ' . $method);
}
$this->_requestMethod = $method;
return $this;
}
/**
* Get request method
*
* @return string
*/
public function getRequestMethod()
{
return $this->_requestMethod;
}
/**
* Set RSA public key
*
* @param Zend_Crypt_Rsa_Key_Public $key
* @return Zend_Oauth_Config
*/
public function setRsaPublicKey(Zend_Crypt_Rsa_Key_Public $key)
{
$this->_rsaPublicKey = $key;
return $this;
}
/**
* Get RSA public key
*
* @return Zend_Crypt_Rsa_Key_Public
*/
public function getRsaPublicKey()
{
return $this->_rsaPublicKey;
}
/**
* Set RSA private key
*
* @param Zend_Crypt_Rsa_Key_Private $key
* @return Zend_Oauth_Config
*/
public function setRsaPrivateKey(Zend_Crypt_Rsa_Key_Private $key)
{
$this->_rsaPrivateKey = $key;
return $this;
}
/**
* Get RSA private key
*
* @return Zend_Crypt_Rsa_Key_Private
*/
public function getRsaPrivateKey()
{
return $this->_rsaPrivateKey;
}
/**
* Set OAuth token
*
* @param Zend_Oauth_Token $token
* @return Zend_Oauth_Config
*/
public function setToken(Zend_Oauth_Token $token)
{
$this->_token = $token;
return $this;
}
/**
* Get OAuth token
*
* @return Zend_Oauth_Token
*/
public function getToken()
{
return $this->_token;
}
/**
* Set OAuth realm
*
* @param string $realm
* @return Zend_Oauth_Config
*/
public function setRealm($realm)
{
$this->_realm = $realm;
return $this;
}
/**
* Get OAuth realm
*
* @return string
*/
public function getRealm()
{
return $this->_realm;
}
}