139 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * PHPMailer - PHP email creation and transport class.
 | 
						|
 * PHP Version 5.5.
 | 
						|
 *
 | 
						|
 * @see       https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
 | 
						|
 *
 | 
						|
 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 | 
						|
 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
 | 
						|
 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 | 
						|
 * @author    Brent R. Matzelle (original founder)
 | 
						|
 * @copyright 2012 - 2015 Marcus Bointon
 | 
						|
 * @copyright 2010 - 2012 Jim Jagielski
 | 
						|
 * @copyright 2004 - 2009 Andy Prevost
 | 
						|
 * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 | 
						|
 * @note      This program is distributed in the hope that it will be useful - WITHOUT
 | 
						|
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 | 
						|
 * FITNESS FOR A PARTICULAR PURPOSE.
 | 
						|
 */
 | 
						|
 | 
						|
namespace PHPMailer\PHPMailer;
 | 
						|
 | 
						|
use League\OAuth2\Client\Grant\RefreshToken;
 | 
						|
use League\OAuth2\Client\Provider\AbstractProvider;
 | 
						|
use League\OAuth2\Client\Token\AccessToken;
 | 
						|
 | 
						|
/**
 | 
						|
 * OAuth - OAuth2 authentication wrapper class.
 | 
						|
 * Uses the oauth2-client package from the League of Extraordinary Packages.
 | 
						|
 *
 | 
						|
 * @see     http://oauth2-client.thephpleague.com
 | 
						|
 *
 | 
						|
 * @author  Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 | 
						|
 */
 | 
						|
class OAuth
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * An instance of the League OAuth Client Provider.
 | 
						|
     *
 | 
						|
     * @var AbstractProvider
 | 
						|
     */
 | 
						|
    protected $provider;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The current OAuth access token.
 | 
						|
     *
 | 
						|
     * @var AccessToken
 | 
						|
     */
 | 
						|
    protected $oauthToken;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The user's email address, usually used as the login ID
 | 
						|
     * and also the from address when sending email.
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $oauthUserEmail = '';
 | 
						|
 | 
						|
    /**
 | 
						|
     * The client secret, generated in the app definition of the service you're connecting to.
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $oauthClientSecret = '';
 | 
						|
 | 
						|
    /**
 | 
						|
     * The client ID, generated in the app definition of the service you're connecting to.
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $oauthClientId = '';
 | 
						|
 | 
						|
    /**
 | 
						|
     * The refresh token, used to obtain new AccessTokens.
 | 
						|
     *
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $oauthRefreshToken = '';
 | 
						|
 | 
						|
    /**
 | 
						|
     * OAuth constructor.
 | 
						|
     *
 | 
						|
     * @param array $options Associative array containing
 | 
						|
     *                       `provider`, `userName`, `clientSecret`, `clientId` and `refreshToken` elements
 | 
						|
     */
 | 
						|
    public function __construct($options)
 | 
						|
    {
 | 
						|
        $this->provider = $options['provider'];
 | 
						|
        $this->oauthUserEmail = $options['userName'];
 | 
						|
        $this->oauthClientSecret = $options['clientSecret'];
 | 
						|
        $this->oauthClientId = $options['clientId'];
 | 
						|
        $this->oauthRefreshToken = $options['refreshToken'];
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get a new RefreshToken.
 | 
						|
     *
 | 
						|
     * @return RefreshToken
 | 
						|
     */
 | 
						|
    protected function getGrant()
 | 
						|
    {
 | 
						|
        return new RefreshToken();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get a new AccessToken.
 | 
						|
     *
 | 
						|
     * @return AccessToken
 | 
						|
     */
 | 
						|
    protected function getToken()
 | 
						|
    {
 | 
						|
        return $this->provider->getAccessToken(
 | 
						|
            $this->getGrant(),
 | 
						|
            ['refresh_token' => $this->oauthRefreshToken]
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Generate a base64-encoded OAuth token.
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function getOauth64()
 | 
						|
    {
 | 
						|
        // Get a new token if it's not available or has expired
 | 
						|
        if (null === $this->oauthToken || $this->oauthToken->hasExpired()) {
 | 
						|
            $this->oauthToken = $this->getToken();
 | 
						|
        }
 | 
						|
 | 
						|
        return base64_encode(
 | 
						|
            'user=' .
 | 
						|
            $this->oauthUserEmail .
 | 
						|
            "\001auth=Bearer " .
 | 
						|
            $this->oauthToken .
 | 
						|
            "\001\001"
 | 
						|
        );
 | 
						|
    }
 | 
						|
}
 |