| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 | 
							- <?php
 
- /**
 
-  * PHPMailer - PHP email creation and transport class.
 
-  * PHP Version 5.5
 
-  * @package PHPMailer
 
-  * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
 
-  * @author Marcus Bointon (Synchro/coolbru) <[email protected]>
 
-  * @author Jim Jagielski (jimjag) <[email protected]>
 
-  * @author Andy Prevost (codeworxtech) <[email protected]>
 
-  * @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.
 
-  */
 
- /**
 
-  * Get an OAuth2 token from an OAuth2 provider.
 
-  * * Install this script on your server so that it's accessible
 
-  * as [https/http]://<yourdomain>/<folder>/get_oauth_token.php
 
-  * e.g.: http://localhost/phpmailer/get_oauth_token.php
 
-  * * Ensure dependencies are installed with 'composer install'
 
-  * * Set up an app in your Google/Yahoo/Microsoft account
 
-  * * Set the script address as the app's redirect URL
 
-  * If no refresh token is obtained when running this file,
 
-  * revoke access to your app and run the script again.
 
-  */
 
- namespace PHPMailer\PHPMailer;
 
- /**
 
-  * Aliases for League Provider Classes
 
-  * Make sure you have added these to your composer.json and run `composer install`
 
-  * Plenty to choose from here:
 
-  * @see http://oauth2-client.thephpleague.com/providers/thirdparty/
 
-  */
 
- //@see https://github.com/thephpleague/oauth2-google
 
- use League\OAuth2\Client\Provider\Google;
 
- //@see https://packagist.org/packages/hayageek/oauth2-yahoo
 
- use Hayageek\OAuth2\Client\Provider\Yahoo;
 
- //@see https://github.com/stevenmaguire/oauth2-microsoft
 
- use Stevenmaguire\OAuth2\Client\Provider\Microsoft;
 
- //@see https://github.com/greew/oauth2-azure-provider
 
- use Greew\OAuth2\Client\Provider\Azure;
 
- if (!isset($_GET['code']) && !isset($_POST['provider'])) {
 
-     ?>
 
- <html>
 
- <body>
 
- <form method="post">
 
-     <h1>Select Provider</h1>
 
-     <input type="radio" name="provider" value="Google" id="providerGoogle">
 
-     <label for="providerGoogle">Google</label><br>
 
-     <input type="radio" name="provider" value="Yahoo" id="providerYahoo">
 
-     <label for="providerYahoo">Yahoo</label><br>
 
-     <input type="radio" name="provider" value="Microsoft" id="providerMicrosoft">
 
-     <label for="providerMicrosoft">Microsoft</label><br>
 
-     <input type="radio" name="provider" value="Azure" id="providerAzure">
 
-     <label for="providerAzure">Azure</label><br>
 
-     <h1>Enter id and secret</h1>
 
-     <p>These details are obtained by setting up an app in your provider's developer console.
 
-     </p>
 
-     <p>ClientId: <input type="text" name="clientId"><p>
 
-     <p>ClientSecret: <input type="text" name="clientSecret"></p>
 
-     <p>TenantID (only relevant for Azure): <input type="text" name="tenantId"></p>
 
-     <input type="submit" value="Continue">
 
- </form>
 
- </body>
 
- </html>
 
-     <?php
 
-     exit;
 
- }
 
- require 'vendor/autoload.php';
 
- session_start();
 
- $providerName = '';
 
- $clientId = '';
 
- $clientSecret = '';
 
- $tenantId = '';
 
- if (array_key_exists('provider', $_POST)) {
 
-     $providerName = $_POST['provider'];
 
-     $clientId = $_POST['clientId'];
 
-     $clientSecret = $_POST['clientSecret'];
 
-     $tenantId = $_POST['tenantId'];
 
-     $_SESSION['provider'] = $providerName;
 
-     $_SESSION['clientId'] = $clientId;
 
-     $_SESSION['clientSecret'] = $clientSecret;
 
-     $_SESSION['tenantId'] = $tenantId;
 
- } elseif (array_key_exists('provider', $_SESSION)) {
 
-     $providerName = $_SESSION['provider'];
 
-     $clientId = $_SESSION['clientId'];
 
-     $clientSecret = $_SESSION['clientSecret'];
 
-     $tenantId = $_SESSION['tenantId'];
 
- }
 
- //If you don't want to use the built-in form, set your client id and secret here
 
- //$clientId = 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com';
 
- //$clientSecret = 'RANDOMCHARS-----lGyjPcRtvP';
 
- //If this automatic URL doesn't work, set it yourself manually to the URL of this script
 
- $redirectUri = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
 
- //$redirectUri = 'http://localhost/PHPMailer/redirect';
 
- $params = [
 
-     'clientId' => $clientId,
 
-     'clientSecret' => $clientSecret,
 
-     'redirectUri' => $redirectUri,
 
-     'accessType' => 'offline'
 
- ];
 
- $options = [];
 
- $provider = null;
 
- switch ($providerName) {
 
-     case 'Google':
 
-         $provider = new Google($params);
 
-         $options = [
 
-             'scope' => [
 
-                 'https://mail.google.com/'
 
-             ]
 
-         ];
 
-         break;
 
-     case 'Yahoo':
 
-         $provider = new Yahoo($params);
 
-         break;
 
-     case 'Microsoft':
 
-         $provider = new Microsoft($params);
 
-         $options = [
 
-             'scope' => [
 
-                 'wl.imap',
 
-                 'wl.offline_access'
 
-             ]
 
-         ];
 
-         break;
 
-     case 'Azure':
 
-         $params['tenantId'] = $tenantId;
 
-         $provider = new Azure($params);
 
-         $options = [
 
-             'scope' => [
 
-                 'https://outlook.office.com/SMTP.Send',
 
-                 'offline_access'
 
-             ]
 
-         ];
 
-         break;
 
- }
 
- if (null === $provider) {
 
-     exit('Provider missing');
 
- }
 
- if (!isset($_GET['code'])) {
 
-     //If we don't have an authorization code then get one
 
-     $authUrl = $provider->getAuthorizationUrl($options);
 
-     $_SESSION['oauth2state'] = $provider->getState();
 
-     header('Location: ' . $authUrl);
 
-     exit;
 
-     //Check given state against previously stored one to mitigate CSRF attack
 
- } elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
 
-     unset($_SESSION['oauth2state']);
 
-     unset($_SESSION['provider']);
 
-     exit('Invalid state');
 
- } else {
 
-     unset($_SESSION['provider']);
 
-     //Try to get an access token (using the authorization code grant)
 
-     $token = $provider->getAccessToken(
 
-         'authorization_code',
 
-         [
 
-             'code' => $_GET['code']
 
-         ]
 
-     );
 
-     //Use this to interact with an API on the users behalf
 
-     //Use this to get a new access token if the old one expires
 
-     echo 'Refresh Token: ', $token->getRefreshToken();
 
- }
 
 
  |