Skip to content

Commit db86cb4

Browse files
authored
Merge pull request #2 from php-api-clients/authentication
Authentication
2 parents 384d742 + 6d9f107 commit db86cb4

File tree

6 files changed

+114
-3
lines changed

6 files changed

+114
-3
lines changed

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"php": "^7.0",
1313
"api-clients/client-services": "^1.3",
1414
"api-clients/foundation": "^1.0",
15+
"api-clients/middleware-basic-authorization": "^3.0",
1516
"api-clients/middleware-http-exceptions": "^2.0",
1617
"api-clients/middleware-user-agent": "^2.0",
1718
"api-clients/middleware-xml": "^1.0",

composer.lock

Lines changed: 46 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php declare(strict_types=1);
2+
3+
use ApiClients\Client\Supervisord\AsyncClient;
4+
use ApiClients\Client\Supervisord\Options;
5+
use ApiClients\Client\Supervisord\Resource\StateInterface;
6+
use React\EventLoop\Factory;
7+
use function ApiClients\Foundation\resource_pretty_print;
8+
9+
require dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor/autoload.php';
10+
11+
$options = [
12+
Options::USERNAME => 'username',
13+
Options::PASSWORD => 'password',
14+
];
15+
16+
$loop = Factory::create();
17+
$client = AsyncClient::create(require __DIR__ . DIRECTORY_SEPARATOR . 'resolve_host.php', $loop, $options);
18+
19+
$client->state()->done(function (StateInterface $state) {
20+
resource_pretty_print($state);
21+
}, function ($et) {
22+
echo (string)$et;
23+
});
24+
25+
$loop->run();

examples/authenticated-state.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php declare(strict_types=1);
2+
3+
use ApiClients\Client\Supervisord\Client;
4+
use ApiClients\Client\Supervisord\Options;
5+
use function ApiClients\Foundation\resource_pretty_print;
6+
7+
require dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor/autoload.php';
8+
9+
$options = [
10+
Options::USERNAME => 'username',
11+
Options::PASSWORD => 'password',
12+
];
13+
14+
$client = Client::create(require __DIR__ . DIRECTORY_SEPARATOR . 'resolve_host.php', $options);
15+
16+
resource_pretty_print($client->state());

src/ApiSettings.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
use ApiClients\Foundation\Hydrator\Options as HydratorOptions;
88
use ApiClients\Foundation\Options as FoundationOptions;
99
use ApiClients\Foundation\Transport\Options as TransportOptions;
10+
use ApiClients\Middleware\BasicAuthorization\BasicAuthorizationHeaderMiddleware;
11+
use ApiClients\Middleware\BasicAuthorization\Options as BasicAuthorizationHeaderMiddlewareOptions;
1012
use ApiClients\Middleware\HttpExceptions\HttpExceptionsMiddleware;
1113
use ApiClients\Middleware\UserAgent\Options as UserAgentMiddlewareOptions;
1214
use ApiClients\Middleware\UserAgent\UserAgentMiddleware;
@@ -46,10 +48,21 @@ public static function getOptions(string $host, array $suppliedOptions, string $
4648
$options = options_merge(self::TRANSPORT_OPTIONS, $suppliedOptions);
4749
$options[FoundationOptions::HYDRATOR_OPTIONS][HydratorOptions::NAMESPACE_SUFFIX] = $suffix;
4850

51+
$transportOptions = $options[FoundationOptions::TRANSPORT_OPTIONS];
52+
4953
list($ip, $port) = explode(':', $host);
54+
$transportOptions[TransportOptions::HOST] = $ip;
55+
$transportOptions[TransportOptions::PORT] = $port;
56+
57+
if (isset($suppliedOptions[Options::USERNAME])) {
58+
$transportOptions[TransportOptions::MIDDLEWARE][] = BasicAuthorizationHeaderMiddleware::class;
59+
$transportOptions[TransportOptions::DEFAULT_REQUEST_OPTIONS][BasicAuthorizationHeaderMiddleware::class] = [
60+
BasicAuthorizationHeaderMiddlewareOptions::USERNAME => $suppliedOptions[Options::USERNAME],
61+
BasicAuthorizationHeaderMiddlewareOptions::PASSWORD => $suppliedOptions[Options::PASSWORD] ?? '',
62+
];
63+
}
5064

51-
$options[FoundationOptions::TRANSPORT_OPTIONS][TransportOptions::HOST] = $ip;
52-
$options[FoundationOptions::TRANSPORT_OPTIONS][TransportOptions::PORT] = $port;
65+
$options[FoundationOptions::TRANSPORT_OPTIONS] = $transportOptions;
5366

5467
return $options;
5568
}

src/Options.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace ApiClients\Client\Supervisord;
6+
7+
final class Options
8+
{
9+
const USERNAME = 'username';
10+
const PASSWORD = 'password';
11+
}

0 commit comments

Comments
 (0)