PHP Classes

File: modules/mail/phpmailer/OAuth.php

Recommend this page to a friend!
  Classes of Adrian M   upMVC   modules/mail/phpmailer/OAuth.php   Download  
File: modules/mail/phpmailer/OAuth.php
Role: Class source
Content type: text/plain
Description: Class source
Class: upMVC
Pure PHP web development without other frameworks
Author: By
Last change:
Date: 5 months ago
Size: 3,774 bytes
 

Contents

Class file image Download
<?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 - 2020 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 implements OAuthTokenProvider
{
   
/**
     * 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"
       
);
    }
}