mirror of
				https://github.com/Icinga/icingaweb2.git
				synced 2025-10-31 11:24:51 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			269 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			269 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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-2014 Zend Technologies USA Inc. (http://www.zend.com)
 | |
|  * @license    http://framework.zend.com/license/new-bsd     New BSD License
 | |
|  * @version    $Id$
 | |
|  */
 | |
| 
 | |
| /** Zend_Oauth */
 | |
| 
 | |
| /** Zend_Uri */
 | |
| 
 | |
| /** Zend_Oauth_Http_RequestToken */
 | |
| 
 | |
| /** Zend_Oauth_Http_UserAuthorization */
 | |
| 
 | |
| /** Zend_Oauth_Http_AccessToken */
 | |
| 
 | |
| /** Zend_Oauth_Token_AuthorizedRequest */
 | |
| 
 | |
| /** Zend_Oauth_Config */
 | |
| 
 | |
| /**
 | |
|  * @category   Zend
 | |
|  * @package    Zend_Oauth
 | |
|  * @copyright  Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
 | |
|  * @license    http://framework.zend.com/license/new-bsd     New BSD License
 | |
|  */
 | |
| class Zend_Oauth_Consumer extends Zend_Oauth
 | |
| {
 | |
|     public $switcheroo = false; // replace later when this works
 | |
| 
 | |
|     /**
 | |
|      * Request Token retrieved from OAuth Provider
 | |
|      *
 | |
|      * @var Zend_Oauth_Token_Request
 | |
|      */
 | |
|     protected $_requestToken = null;
 | |
| 
 | |
|     /**
 | |
|      * Access token retrieved from OAuth Provider
 | |
|      *
 | |
|      * @var Zend_Oauth_Token_Access
 | |
|      */
 | |
|     protected $_accessToken = null;
 | |
| 
 | |
|     /**
 | |
|      * @var Zend_Oauth_Config
 | |
|      */
 | |
|     protected $_config = 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)
 | |
|     {
 | |
|         $this->_config = new Zend_Oauth_Config;
 | |
|         if ($options !== null) {
 | |
|             if ($options instanceof Zend_Config) {
 | |
|                 $options = $options->toArray();
 | |
|             }
 | |
|             $this->_config->setOptions($options);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Attempts to retrieve a Request Token from an OAuth Provider which is
 | |
|      * later exchanged for an authorized Access Token used to access the
 | |
|      * protected resources exposed by a web service API.
 | |
|      *
 | |
|      * @param  null|array $customServiceParameters Non-OAuth Provider-specified parameters
 | |
|      * @param  null|string $httpMethod
 | |
|      * @param  null|Zend_Oauth_Http_RequestToken $request
 | |
|      * @return Zend_Oauth_Token_Request
 | |
|      */
 | |
|     public function getRequestToken(
 | |
|         array $customServiceParameters = null,
 | |
|         $httpMethod = null,
 | |
|         Zend_Oauth_Http_RequestToken $request = null
 | |
|     ) {
 | |
|         if ($request === null) {
 | |
|             $request = new Zend_Oauth_Http_RequestToken($this, $customServiceParameters);
 | |
|         } elseif($customServiceParameters !== null) {
 | |
|             $request->setParameters($customServiceParameters);
 | |
|         }
 | |
|         if ($httpMethod !== null) {
 | |
|             $request->setMethod($httpMethod);
 | |
|         } else {
 | |
|             $request->setMethod($this->getRequestMethod());
 | |
|         }
 | |
|         $this->_requestToken = $request->execute();
 | |
|         return $this->_requestToken;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * After a Request Token is retrieved, the user may be redirected to the
 | |
|      * OAuth Provider to authorize the application's access to their
 | |
|      * protected resources - the redirect URL being provided by this method.
 | |
|      * Once the user has authorized the application for access, they are
 | |
|      * redirected back to the application which can now exchange the previous
 | |
|      * Request Token for a fully authorized Access Token.
 | |
|      *
 | |
|      * @param  null|array $customServiceParameters
 | |
|      * @param  null|Zend_Oauth_Token_Request $token
 | |
|      * @param  null|Zend_OAuth_Http_UserAuthorization $redirect
 | |
|      * @return string
 | |
|      */
 | |
|     public function getRedirectUrl(
 | |
|         array $customServiceParameters = null,
 | |
|         Zend_Oauth_Token_Request $token = null,
 | |
|         Zend_Oauth_Http_UserAuthorization $redirect = null
 | |
|     ) {
 | |
|         if ($redirect === null) {
 | |
|             $redirect = new Zend_Oauth_Http_UserAuthorization($this, $customServiceParameters);
 | |
|         } elseif($customServiceParameters !== null) {
 | |
|             $redirect->setParameters($customServiceParameters);
 | |
|         }
 | |
|         if ($token !== null) {
 | |
|             $this->_requestToken = $token;
 | |
|         }
 | |
|         return $redirect->getUrl();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Rather than retrieve a redirect URL for use, e.g. from a controller,
 | |
|      * one may perform an immediate redirect.
 | |
|      *
 | |
|      * Sends headers and exit()s on completion.
 | |
|      *
 | |
|      * @param  null|array $customServiceParameters
 | |
|      * @param  null|Zend_Oauth_Token_Request $token
 | |
|      * @param  null|Zend_Oauth_Http_UserAuthorization $request
 | |
|      * @return void
 | |
|      */
 | |
|     public function redirect(
 | |
|         array $customServiceParameters = null,
 | |
|         Zend_Oauth_Token_Request $token = null,
 | |
|         Zend_Oauth_Http_UserAuthorization $request = null
 | |
|     ) {
 | |
|         if ($token instanceof Zend_Oauth_Http_UserAuthorization) {
 | |
|             $request = $token;
 | |
|             $token = null;
 | |
|         }
 | |
|         $redirectUrl = $this->getRedirectUrl($customServiceParameters, $token, $request);
 | |
|         header('Location: ' . $redirectUrl);
 | |
|         exit(1);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Retrieve an Access Token in exchange for a previously received/authorized
 | |
|      * Request Token.
 | |
|      *
 | |
|      * @param  array $queryData GET data returned in user's redirect from Provider
 | |
|      * @param  Zend_Oauth_Token_Request Request Token information
 | |
|      * @param  string $httpMethod
 | |
|      * @param  Zend_Oauth_Http_AccessToken $request
 | |
|      * @return Zend_Oauth_Token_Access
 | |
|      * @throws Zend_Oauth_Exception on invalid authorization token, non-matching response authorization token, or unprovided authorization token
 | |
|      */
 | |
|     public function getAccessToken(
 | |
|         $queryData,
 | |
|         Zend_Oauth_Token_Request $token,
 | |
|         $httpMethod = null,
 | |
|         Zend_Oauth_Http_AccessToken $request = null
 | |
|     ) {
 | |
|         $authorizedToken = new Zend_Oauth_Token_AuthorizedRequest($queryData);
 | |
|         if (!$authorizedToken->isValid()) {
 | |
|             throw new Zend_Oauth_Exception(
 | |
|                 'Response from Service Provider is not a valid authorized request token');
 | |
|         }
 | |
|         if ($request === null) {
 | |
|             $request = new Zend_Oauth_Http_AccessToken($this);
 | |
|         }
 | |
| 
 | |
|         // OAuth 1.0a Verifier
 | |
|         if ($authorizedToken->getParam('oauth_verifier') !== null) {
 | |
|             $params = array_merge($request->getParameters(), array(
 | |
|                 'oauth_verifier' => $authorizedToken->getParam('oauth_verifier')
 | |
|             ));
 | |
|             $request->setParameters($params);
 | |
|         }
 | |
|         if ($httpMethod !== null) {
 | |
|             $request->setMethod($httpMethod);
 | |
|         } else {
 | |
|             $request->setMethod($this->getRequestMethod());
 | |
|         }
 | |
|         if (isset($token)) {
 | |
|             if ($authorizedToken->getToken() !== $token->getToken()) {
 | |
|                 throw new Zend_Oauth_Exception(
 | |
|                     'Authorized token from Service Provider does not match'
 | |
|                     . ' supplied Request Token details'
 | |
|                 );
 | |
|             }
 | |
|         } else {
 | |
|             throw new Zend_Oauth_Exception('Request token must be passed to method');
 | |
|         }
 | |
|         $this->_requestToken = $token;
 | |
|         $this->_accessToken = $request->execute();
 | |
|         return $this->_accessToken;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Return whatever the last Request Token retrieved was while using the
 | |
|      * current Consumer instance.
 | |
|      *
 | |
|      * @return Zend_Oauth_Token_Request
 | |
|      */
 | |
|     public function getLastRequestToken()
 | |
|     {
 | |
|         return $this->_requestToken;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Return whatever the last Access Token retrieved was while using the
 | |
|      * current Consumer instance.
 | |
|      *
 | |
|      * @return Zend_Oauth_Token_Access
 | |
|      */
 | |
|     public function getLastAccessToken()
 | |
|     {
 | |
|         return $this->_accessToken;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Alias to self::getLastAccessToken()
 | |
|      *
 | |
|      * @return Zend_Oauth_Token_Access
 | |
|      */
 | |
|     public function getToken()
 | |
|     {
 | |
|         return $this->_accessToken;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Simple Proxy to the current Zend_Oauth_Config method. It's that instance
 | |
|      * which holds all configuration methods and values this object also presents
 | |
|      * as it's API.
 | |
|      *
 | |
|      * @param  string $method
 | |
|      * @param  array $args
 | |
|      * @return mixed
 | |
|      * @throws Zend_Oauth_Exception if method does not exist in config object
 | |
|      */
 | |
|     public function __call($method, array $args)
 | |
|     {
 | |
|         if (!method_exists($this->_config, $method)) {
 | |
|             throw new Zend_Oauth_Exception('Method does not exist: '.$method);
 | |
|         }
 | |
|         return call_user_func_array(array($this->_config,$method), $args);
 | |
|     }
 | |
| }
 |