Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
/**
4
 * PHPMailer - PHP email creation and transport class.
5
 * PHP Version 5.5.
6
 *
7
 * @see       https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
8
 *
9
 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
10
 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
11
 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
12
 * @author    Brent R. Matzelle (original founder)
13
 * @copyright 2012 - 2020 Marcus Bointon
14
 * @copyright 2010 - 2012 Jim Jagielski
15
 * @copyright 2004 - 2009 Andy Prevost
16
 * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
17
 * @note      This program is distributed in the hope that it will be useful - WITHOUT
18
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19
 * FITNESS FOR A PARTICULAR PURPOSE.
20
 */
21
 
22
namespace PHPMailer\PHPMailer;
23
 
24
use League\OAuth2\Client\Grant\RefreshToken;
25
use League\OAuth2\Client\Provider\AbstractProvider;
26
use League\OAuth2\Client\Token\AccessToken;
27
 
28
/**
29
 * OAuth - OAuth2 authentication wrapper class.
30
 * Uses the oauth2-client package from the League of Extraordinary Packages.
31
 *
32
 * @see     http://oauth2-client.thephpleague.com
33
 *
34
 * @author  Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
35
 */
36
class OAuth implements OAuthTokenProvider
37
{
38
    /**
39
     * An instance of the League OAuth Client Provider.
40
     *
41
     * @var AbstractProvider
42
     */
43
    protected $provider;
44
 
45
    /**
46
     * The current OAuth access token.
47
     *
48
     * @var AccessToken
49
     */
50
    protected $oauthToken;
51
 
52
    /**
53
     * The user's email address, usually used as the login ID
54
     * and also the from address when sending email.
55
     *
56
     * @var string
57
     */
58
    protected $oauthUserEmail = '';
59
 
60
    /**
61
     * The client secret, generated in the app definition of the service you're connecting to.
62
     *
63
     * @var string
64
     */
65
    protected $oauthClientSecret = '';
66
 
67
    /**
68
     * The client ID, generated in the app definition of the service you're connecting to.
69
     *
70
     * @var string
71
     */
72
    protected $oauthClientId = '';
73
 
74
    /**
75
     * The refresh token, used to obtain new AccessTokens.
76
     *
77
     * @var string
78
     */
79
    protected $oauthRefreshToken = '';
80
 
81
    /**
82
     * OAuth constructor.
83
     *
84
     * @param array $options Associative array containing
85
     *                       `provider`, `userName`, `clientSecret`, `clientId` and `refreshToken` elements
86
     */
87
    public function __construct($options)
88
    {
89
        $this->provider = $options['provider'];
90
        $this->oauthUserEmail = $options['userName'];
91
        $this->oauthClientSecret = $options['clientSecret'];
92
        $this->oauthClientId = $options['clientId'];
93
        $this->oauthRefreshToken = $options['refreshToken'];
94
    }
95
 
96
    /**
97
     * Get a new RefreshToken.
98
     *
99
     * @return RefreshToken
100
     */
101
    protected function getGrant()
102
    {
103
        return new RefreshToken();
104
    }
105
 
106
    /**
107
     * Get a new AccessToken.
108
     *
109
     * @return AccessToken
110
     */
111
    protected function getToken()
112
    {
113
        return $this->provider->getAccessToken(
114
            $this->getGrant(),
115
            ['refresh_token' => $this->oauthRefreshToken]
116
        );
117
    }
118
 
119
    /**
120
     * Generate a base64-encoded OAuth token.
121
     *
122
     * @return string
123
     */
124
    public function getOauth64()
125
    {
126
        //Get a new token if it's not available or has expired
127
        if (null === $this->oauthToken || $this->oauthToken->hasExpired()) {
128
            $this->oauthToken = $this->getToken();
129
        }
130
 
131
        return base64_encode(
132
            'user=' .
133
            $this->oauthUserEmail .
134
            "\001auth=Bearer " .
135
            $this->oauthToken .
136
            "\001\001"
137
        );
138
    }
139
}