Skip to content

Instantly share code, notes, and snippets.

@kelunik
Last active September 11, 2017 08:29
Show Gist options
  • Save kelunik/36601941bdb53e74f2227cdc637edb5b to your computer and use it in GitHub Desktop.
Save kelunik/36601941bdb53e74f2227cdc637edb5b to your computer and use it in GitHub Desktop.
<?php
$expectedState = ...; // oauth state to prevent CSRF
$url = Amp\Promise\wait(Amp\call(function () {
$deferred = new Amp\Deferred;
$deferredPromise = $deferred->promise();
$host = (new Aerys\Host)
->name("localhost")
->expose("127.0.0.1", 8080)
->use(function (Aerys\Request $request, Aerys\Response $response) use ($expectedState, &$deferred) {
if (!$deferred) {
return;
}
if (hash_equals($request->getParam("state"), $expectedState)) {
$deferred->resolve($request->getParam("code"));
$deferred = null;
}
});
$server = Aerys\initServer(new NullLogger, [$host]);
yield $server->start();
$code = yield Amp\Promise\first([
$deferredPromise,
new Amp\Delayed(30000), // <-- 30 second timeout, $code is null in case of a timeout
]);
yield $server->stop();
return $code;
}));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment