Files
2024-03-17 11:39:27 +07:00

115 lines
3.1 KiB
PHP

<?php
/**
* SocialConnect project
* @author: Patsura Dmitry https://github.com/ovr <[email protected]>
*/
error_reporting(-1);
ini_set('display_errors', 1);
include_once __DIR__ . '/../vendor/autoload.php';
include_once __DIR__ . '/vendor/autoload.php';
$configureProviders = include_once 'config.php';
$httpClient = new \SocialConnect\Common\Http\Client\Curl();
/**
* By default We are using Curl class from SocialConnect/Common
* but you can use Guzzle wrapper ^5.3|^6.0
*/
//$httpClient = new \SocialConnect\Common\Http\Client\Guzzle(
// new \GuzzleHttp\Client()
//);
/**
* Why We need Cache decorator for HTTP Client?
* Providers like OpenID & OpenIDConnect require US
* to request OpenID specification (and JWK(s) for OpenIDConnect)
*
* It's not a good idea to request it every time, because it's unneeded round trip to the server
* if you are using OpenID or OpenIDConnect we suggest you to use cache
*
* If you don`t use providers like (Steam) from OpenID or OpenIDConnect
* you may skip this because it's not needed
*/
$httpClient = new \SocialConnect\Common\Http\Client\Cache(
$httpClient,
/**
* Please dont use FilesystemCache for production/stage env, only for local testing!
* It doesnot support cache expire (remove)
*/
new \Doctrine\Common\Cache\FilesystemCache(
__DIR__ . '/cache'
)
);
/**
* By default collection factory is null, in this case Auth\Service will create
* a new instance of \SocialConnect\Auth\CollectionFactory
* you can use custom or register another providers by CollectionFactory instance
*/
$collectionFactory = null;
$service = new \SocialConnect\Auth\Service(
$httpClient,
new \SocialConnect\Provider\Session\Session(),
$configureProviders,
$collectionFactory
);
$app = new \Slim\App(
[
'settings' => [
'displayErrorDetails' => true
]
]
);
$app->any('/dump', function() {
dump($_POST);
dump($_GET);
dump($_SERVER);
});
$app->get('/auth/cb/{provider}/', function (\Slim\Http\Request $request) use (&$configureProviders, $service) {
$provider = strtolower($request->getAttribute('provider'));
if (!$service->getFactory()->has($provider)) {
throw new \Exception('Wrong $provider passed in url : ' . $provider);
}
$provider = $service->getProvider($provider);
$accessToken = $provider->getAccessTokenByRequestParameters($_GET);
dump($accessToken);
dump($accessToken->getUserId());
dump($accessToken->getExpires());
$user = $provider->getIdentity($accessToken);
dump($user);
});
$app->get('/', function () {
include_once 'page.php';
});
$app->post('/', function () use (&$configureProviders, $service) {
try {
if (!empty($_POST['provider'])) {
$providerName = $_POST['provider'];
} else {
throw new \Exception('No provider passed in POST Request');
}
$provider = $service->getProvider($providerName);
header('Location: ' . $provider->makeAuthUrl());
} catch (\Exception $e) {
echo $e->getMessage();
}
exit;
});
$app->run();