Feature/merge 3 0 develop (#298)

* merging 3.0 into develop

* N°5102 - Allow to send emails (eg. notifications) using GSuite SMTP and OAuth
* migration to iTop 3.1

Co-authored-by: Eric Espie <eric.espie@combodo.com>
This commit is contained in:
bdalsass
2022-06-08 16:27:20 +02:00
committed by GitHub
parent 1fd792fed9
commit 2b885beb82
347 changed files with 53400 additions and 3034 deletions

View File

@@ -0,0 +1,35 @@
<?php
$provider = require __DIR__ . '/provider.php';
if (!empty($_GET['error'])) {
// Got an error, probably user denied access
exit('Got error: ' . htmlspecialchars($_GET['error'], ENT_QUOTES, 'UTF-8'));
} elseif (empty($_GET['code'])) {
// If we don't have an authorization code then get one
$authUrl = $provider->getAuthorizationUrl();
$_SESSION['oauth2state'] = $provider->getState();
header('Location: ' . $authUrl);
exit;
} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
// State is invalid, possible CSRF attack in progress
unset($_SESSION['oauth2state']);
exit('Invalid state');
} else {
// Try to get an access token (using the authorization code grant)
$token = $provider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);
$_SESSION['token'] = serialize($token);
// Optional: Now you have a token you can look up a users profile data
header('Location: /user.php');
}

View File

@@ -0,0 +1,24 @@
<?php
require __DIR__ . '/../vendor/autoload.php';
use League\OAuth2\Client\Provider\Google;
// Replace these with your token settings
// Create a project at https://console.developers.google.com/
$clientId = 'your-client-id';
$clientSecret = 'your-client-secret';
// Change this if you are not using the built-in PHP server
$redirectUri = 'http://localhost:8080/';
// Start the session
session_start();
// Initialize the provider
$provider = new Google(compact('clientId', 'clientSecret', 'redirectUri'));
// No HTML for demo, prevents any attempt at XSS
header('Content-Type', 'text/plain');
return $provider;

View File

@@ -0,0 +1,7 @@
<?php
$provider = require __DIR__ . '/provider.php';
unset($_SESSION['token'], $_SESSION['state']);
header('Location: /');

View File

@@ -0,0 +1,3 @@
#!/bin/bash
php -S localhost:8080

View File

@@ -0,0 +1,39 @@
<?php
$provider = require __DIR__ . '/provider.php';
if (isset($_GET['logout']) && 1 == $_GET['logout']) {
unset($_SESSION['token']);
}
if (!empty($_SESSION['token'])) {
$token = unserialize($_SESSION['token']);
}
if (empty($token)) {
header('Location: /');
exit;
}
try {
// We got an access token, let's now get the user's details
$userDetails = $provider->getResourceOwner($token);
// Use these details to create a new profile
printf('Hello %s!<br/>', $userDetails->getFirstname());
} catch (Exception $e) {
// Failed to get user details
exit('Something went wrong: ' . $e->getMessage());
}
// Use this to interact with an API on the users behalf
echo "Token is: <tt>", $token->getToken(), "</tt><br/>";
// Use this to get a new access token if the old one expires
echo "Refresh token is: <tt>", $token->getRefreshToken(), "</tt><br/>";
// Number of seconds until the access token will expire, and need refreshing
echo "Expires at ", date('r', $token->getExpires()), "<br/>";
// Allow the user to logout
echo '<a href="?logout=1">Logout</a><br/>';