12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- <?php
- namespace Aws\Rds;
- use Aws\Credentials\CredentialsInterface;
- use Aws\Credentials\Credentials;
- use Aws\Signature\SignatureV4;
- use GuzzleHttp\Psr7\Request;
- use GuzzleHttp\Psr7\Uri;
- use GuzzleHttp\Promise;
- use Aws;
- class AuthTokenGenerator
- {
- private $credentialProvider;
-
- public function __construct($creds)
- {
- if ($creds instanceof CredentialsInterface) {
- if (!function_exists('Aws\constantly')) {
- $promise = new Promise\FulfilledPromise($creds);
- $this->credentialProvider = Aws\constantly($promise);
- }
- } else {
- $this->credentialProvider = $creds;
- }
- }
-
- public function createToken($endpoint, $region, $username, $lifetime = 15)
- {
- if (!is_numeric($lifetime) || $lifetime > 15 || $lifetime <= 0) {
- throw new \InvalidArgumentException(
- "Lifetime must be a positive number less than or equal to 15, was {$lifetime}"
- );
- }
- $uri = new Uri($endpoint);
- $uri = $uri->withPath('/');
- $uri = $uri->withQuery('Action=connect&DBUser=' . $username);
- $request = new Request('GET', $uri);
- $signer = new SignatureV4('rds-db', $region);
- $provider = $this->credentialProvider;
- $url = (string) $signer->presign(
- $request,
- $provider()->wait(),
- '+' . $lifetime . ' minutes'
- )->getUri();
-
- return substr($url, 2);
- }
- }
|