1 <?php
2 /**
3 * PHPMailer - PHP email creation and transport class.
4 * PHP Version 5.4
5 * @package PHPMailer
6 * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
7 * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
8 * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
9 * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
10 * @author Brent R. Matzelle (original founder)
11 * @copyright 2012 - 2014 Marcus Bointon
12 * @copyright 2010 - 2012 Jim Jagielski
13 * @copyright 2004 - 2009 Andy Prevost
14 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
15 * @note This program is distributed in the hope that it will be useful - WITHOUT
16 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 * FITNESS FOR A PARTICULAR PURPOSE.
18 */
19
20 /**
21 * PHPMailerOAuthGoogle - Wrapper for League OAuth2 Google provider.
22 * @package PHPMailer
23 * @author @sherryl4george
24 * @author Marcus Bointon (@Synchro) <phpmailer@synchromedia.co.uk>
25 * @link https://github.com/thephpleague/oauth2-client
26 */
27 class PHPMailerOAuthGoogle
28 {
29 private $oauthUserEmail = '';
30 private $oauthRefreshToken = '';
31 private $oauthClientId = '';
32 private $oauthClientSecret = '';
33
34 /**
35 * @param string $UserEmail
36 * @param string $ClientSecret
37 * @param string $ClientId
38 * @param string $RefreshToken
39 */
40 public function __construct(
41 $UserEmail,
42 $ClientSecret,
43 $ClientId,
44 $RefreshToken
45 ) {
46 $this->oauthClientId = $ClientId;
47 $this->oauthClientSecret = $ClientSecret;
48 $this->oauthRefreshToken = $RefreshToken;
49 $this->oauthUserEmail = $UserEmail;
50 }
51
52 private function getProvider()
53 {
54 return new League\OAuth2\Client\Provider\Google([
55 'clientId' => $this->oauthClientId,
56 'clientSecret' => $this->oauthClientSecret
57 ]);
58 }
59
60 private function getGrant()
61 {
62 return new \League\OAuth2\Client\Grant\RefreshToken();
63 }
64
65 private function getToken()
66 {
67 $provider = $this->getProvider();
68 $grant = $this->getGrant();
69 return $provider->getAccessToken($grant, ['refresh_token' => $this->oauthRefreshToken]);
70 }
71
72 public function getOauth64()
73 {
74 $token = $this->getToken();
75 return base64_encode("user=" . $this->oauthUserEmail . "\001auth=Bearer " . $token . "\001\001");
76 }
77 }
78